diff --git a/src/fio_script/bdev.fio b/fio_script/bdev.fio similarity index 100% rename from src/fio_script/bdev.fio rename to fio_script/bdev.fio diff --git a/src/fio_script/io_uring.fio b/fio_script/io_uring.fio similarity index 100% rename from src/fio_script/io_uring.fio rename to fio_script/io_uring.fio diff --git a/src/fio_script/kingfs b/fio_script/kingfs similarity index 100% rename from src/fio_script/kingfs rename to fio_script/kingfs diff --git a/src/fio_script/libaio.fio b/fio_script/libaio.fio similarity index 100% rename from src/fio_script/libaio.fio rename to fio_script/libaio.fio diff --git a/src/fio_script/nvme.fio b/fio_script/nvme.fio similarity index 100% rename from src/fio_script/nvme.fio rename to fio_script/nvme.fio diff --git a/src/fio_script/psync.fio b/fio_script/psync.fio similarity index 100% rename from src/fio_script/psync.fio rename to fio_script/psync.fio diff --git a/src/fio_script/zvfs.json b/fio_script/zvfs.json similarity index 100% rename from src/fio_script/zvfs.json rename to fio_script/zvfs.json diff --git a/kingfs b/kingfs new file mode 100644 index 0000000..120e2ea Binary files /dev/null and b/kingfs differ diff --git a/scripts/do_pgbecnh.md b/scripts/do_pgbecnh.md index fc57c94..41696b3 100644 --- a/scripts/do_pgbecnh.md +++ b/scripts/do_pgbecnh.md @@ -15,10 +15,14 @@ dynamic_shared_memory_type = sysv # 4. 重启 PostgreSQL +## 清理旧空间 sudo systemctl stop postgresql +pkill -9 -u postgres postgres || true rm -rf /home/lian/pg/pgdata rm -rf /zvfs/pg_ts_bench +rm -rf /tmp/pg.log +## 初始化 sudo chown -R postgres:postgres /home/lian/pg sudo -u postgres mkdir -p /home/lian/pg/pgdata sudo chown -R postgres:postgres /home/lian/pg/pgdata @@ -26,36 +30,42 @@ sudo chown -R postgres:postgres /home/lian/pg/pgdata sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ /usr/lib/postgresql/12/bin/initdb -D /home/lian/pg/pgdata +## 修改配置文件 cp ./postgresql.conf /home/lian/pg/pgdata/ +sudo chown -R postgres:postgres /home/lian/pg/pgdata/postgresql.conf -sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ - /usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start - -sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ - /usr/lib/postgresql/12/bin/psql - -sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ - /usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log restart - -# 创建测试环境 +## 创建测试环境 sudo -u postgres mkdir -p /zvfs/pg_ts_bench sudo chown -R postgres:postgres /zvfs/pg_ts_bench sudo chmod 700 /zvfs/pg_ts_bench -CREATE TABLESPACE zvfs_ts LOCATION '/zvfs/pg_ts_bench'; -DROP DATABASE IF EXISTS benchdb; -CREATE DATABASE benchdb TABLESPACE zvfs_ts; -DROP TABLE IF EXISTS hook_probe; -CREATE TABLE hook_probe(id int) TABLESPACE zvfs_ts; -INSERT INTO hook_probe VALUES (1); -INSERT INTO hook_probe VALUES (2); -INSERT INTO hook_probe VALUES (3); -INSERT INTO hook_probe VALUES (4); -SELECT * FROM hook_probe; -DELETE FROM hook_probe WHERE id = 1; -UPDATE hook_probe SET id = 11 WHERE id = 2; -SELECT * FROM hook_probe; + +## 启动服务 +sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ + /usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start + +sudo -u postgres env \ + LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ + ZVFS_DEBUG_OPEN=1 \ + ZVFS_DEBUG_OPEN_MATCH=PG_VERSION \ + ZVFS_DEBUG_RW=1 \ + /usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log start + +## 打开命令行工具 +sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ + /usr/lib/postgresql/12/bin/psql + + +sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ + ZVFS_DEBUG_OPEN=1 \ + ZVFS_DEBUG_OPEN_MATCH=PG_VERSION \ + ZVFS_DEBUG_RW=1 \ + /usr/lib/postgresql/12/bin/psql + +## 重启服务 +sudo -u postgres env LD_PRELOAD=/home/lian/try/zvfs/src/libzvfs.so \ + /usr/lib/postgresql/12/bin/pg_ctl -D /home/lian/pg/pgdata -l /tmp/pg.log restart # 5. 验证配置生效 @@ -63,15 +73,76 @@ pid=$(pgrep -u postgres -xo postgres) echo "pid=$pid" sudo grep libzvfs /proc/$pid/maps -sudo -u postgres psql -p 5432 -c "show data_directory;" -sudo -u postgres psql -c "SHOW shared_memory_type;" -sudo -u postgres psql -c "SHOW dynamic_shared_memory_type;" +show data_directory; +SHOW shared_memory_type; +SHOW dynamic_shared_memory_type; +``` -# 6. 创建测试库(如未创建) +## 简易功能测试 +```shell +# 1. 创建 tablespace +DROP TABLESPACE IF EXISTS zvfs_ts; +CREATE TABLESPACE zvfs_ts LOCATION '/zvfs/pg_ts_bench'; -sudo -u postgres createdb benchdb +# 2. 创建数据库 +DROP DATABASE IF EXISTS benchdb; +CREATE DATABASE benchdb TABLESPACE zvfs_ts; -# 7. 运行你的 bench 脚本 +## 3. 连接数据库 +\c benchdb +# -- 查看数据库默认 tablespace +SHOW default_tablespace; + +# 4. 创建表(默认 tablespace) +DROP TABLE IF EXISTS hook_probe; +CREATE TABLE hook_probe( + id int, + val text +); + +INSERT INTO hook_probe VALUES (1,'a'); +INSERT INTO hook_probe VALUES (2,'b'); +INSERT INTO hook_probe VALUES (3,'c'); +INSERT INTO hook_probe VALUES (4,'d'); + +SELECT * FROM hook_probe; + +# 5. UPDATE / DELETE 测试 +DELETE FROM hook_probe WHERE id = 1; +UPDATE hook_probe SET id = 11 WHERE id = 2; +SELECT * FROM hook_probe; + + +# 6. 批量 INSERT 测试 +INSERT INTO hook_probe +SELECT generate_series(100,10000), 'bulk'; + +SELECT count(*) FROM hook_probe; + +# 7. 创建索引(测试 index file) +CREATE INDEX idx_hook_probe_id ON hook_probe(id); + +# 8. 大对象测试(TOAST) +INSERT INTO hook_probe VALUES (99999, repeat('zvfs_test_',1000)); + +# 9. VACUUM 测试 +VACUUM hook_probe; + +# 10. ANALYZE +ANALYZE hook_probe; + +# 11. 查看物理文件位置 +SELECT + relname, + pg_relation_filepath(oid) +FROM pg_class +WHERE relname='hook_probe'; + +# 12. 删表 +DROP TABLE IF EXISTS hook_probe; + + +# 13. 压测 bash /home/lian/try/zvfs/scripts/run_pgbench_no_mmap.sh ``` \ No newline at end of file diff --git a/scripts/do_trace.md b/scripts/do_trace.md new file mode 100644 index 0000000..35c6ca0 --- /dev/null +++ b/scripts/do_trace.md @@ -0,0 +1,47 @@ +```shell +pm=$(pgrep -u postgres -xo postgres) +sudo strace -ff -f -yy -s 256 \ + -e trace=%file,read,pread64,readv \ + -p "$pm" -o /tmp/pg.sys.trace + + +strace: Process 233035 attached +strace: Process 235357 attached +^Cstrace: Process 233035 detached + + +fatal_pid=$(grep 'FATAL: "pg_tblspc' /tmp/pg.log | tail -1 | sed -n 's/.*\[\([0-9]\+\)\].*/\1/p'); echo "fatal_pid=$fatal_pid" + +fatal_pid=235357 + + +grep -n "PG_VERSION\|pg_tblspc/16384/PG_12_201909212/16385" /tmp/pg.sys.trace.$fatal_pid + +18:access("pg_tblspc/16384/PG_12_201909212/16385", F_OK) = 0 +19:openat(AT_FDCWD, "pg_tblspc/16384/PG_12_201909212/16385/PG_VERSION", O_RDONLY) = 4 +20:read(4, "\0\0\0", 4096) = 3 +21:read(4, "", 4096) = 0 + + + +fatal_pid=$(grep 'FATAL: "pg_tblspc' /tmp/pg.log | tail -1 | sed -n 's/.*\[\([0-9]\+\)\].*/\1/p'); echo "fatal_pid=$fatal_pid" + +grep -n "\[zvfs\]\[rw-dbg\].*pid=${fatal_pid}" /tmp/pg.log | tail -n 120 + +6461:[zvfs][rw-dbg][pid=235357][tid=140193133607488][fd=4] read passthrough reason=fd_not_zvfs count=512 +6462:[zvfs][rw-dbg][pid=235357][tid=140193133607488][fd=4] read passthrough ret=512 errno=0(OK) +``` + + +```shell +sudo strace -ff -f -k -yy -s 256 -e trace=openat,read,pread64 -p "$pm" -o /tmp/pg.ktrace +``` + +调用链: + +libc(__open64) -> _IO_file_open -> fopen -> AllocateFile -> ValidatePgVersion + +是fopen,内部调用 libc_(__open64) + + + diff --git a/scripts/run_db_bench_zvfs.sh b/scripts/run_db_bench_zvfs.sh index 5f6af04..0b56fab 100755 --- a/scripts/run_db_bench_zvfs.sh +++ b/scripts/run_db_bench_zvfs.sh @@ -21,7 +21,7 @@ BENCHMARKS="fillrandom,readrandom" # key数 # NUM=1000000 -NUM=500 +NUM=5000 # 线程数 THREADS=2 diff --git a/scripts/run_pgbench_no_mmap.sh b/scripts/run_pgbench_no_mmap.sh index a5d534e..c355752 100755 --- a/scripts/run_pgbench_no_mmap.sh +++ b/scripts/run_pgbench_no_mmap.sh @@ -1,91 +1,53 @@ #!/usr/bin/env bash set -euo pipefail -# 仅执行 pgbench 的脚本(不安装 PostgreSQL,不 initdb,不启停服务,不改配置)。 -# -# 前提条件: -# 1) PostgreSQL 已经在运行。 -# 2) 测试库已经存在(默认 benchdb)。 -# 3) PostgreSQL 已经在外部配置为禁用 mmap 共享内存: -# shared_memory_type = sysv -# dynamic_shared_memory_type = sysv -# -# 关于 Malloc0: -# - 当前后端是内存虚拟设备,容量有限。 -# - 默认参数故意设置得较小,避免一次灌入过多数据。 -# -# 关于 LD_PRELOAD: -# - USE_LD_PRELOAD_INIT=1:初始化阶段(pgbench -i)启用 LD_PRELOAD -# - USE_LD_PRELOAD_RUN=1 :压测阶段启用 LD_PRELOAD -# - 设为 0 即可关闭对应阶段的 LD_PRELOAD -# -# 用法: -# bash codex/run_pgbench_no_mmap.sh -# -# 可选环境变量(含义): -# PG_HOST=127.0.0.1 -# PostgreSQL 服务器地址。 -# PG_PORT=5432 -# PostgreSQL 服务器端口(默认改为 5432)。 -# PG_DB=benchdb -# 压测数据库名。 -# PG_SCALE=2 -# pgbench 初始化规模因子(-s),越大初始数据越多。 -# PG_TIME=20 -# 压测持续时间(秒,pgbench -T)。 -# PG_CLIENTS=2 -# 并发客户端数(pgbench -c)。 -# PG_JOBS=2 -# 工作线程数(pgbench -j)。 -# PG_SUPERUSER=postgres -# 执行 pgbench 的系统用户(通常是 postgres)。 -# LD_PRELOAD_PATH=/home/lian/try/zvfs/src/libzvfs.so -# LD_PRELOAD 目标库路径(你的 zvfs hook so)。 -# PG_BIN_DIR=/usr/lib/postgresql/16/bin -# pgbench 所在目录;不填时自动从 PATH 查找。 -# USE_LD_PRELOAD_INIT=1 -# 初始化阶段(pgbench -i)是否启用 LD_PRELOAD:1=启用,0=关闭。 -# USE_LD_PRELOAD_RUN=1 -# 压测阶段是否启用 LD_PRELOAD:1=启用,0=关闭。 +# 简化版 pgbench 测试脚本: +# 1) 参数都在本文件顶部配置; +# 2) 直接连接 benchdb; +# 3) 执行 pgbench 初始化和压测。 -PG_HOST="${PG_HOST:-127.0.0.1}" -PG_PORT="${PG_PORT:-5432}" -PG_DB="${PG_DB:-benchdb}" -PG_SCALE="${PG_SCALE:-2}" -PG_TIME="${PG_TIME:-20}" -PG_CLIENTS="${PG_CLIENTS:-2}" -PG_JOBS="${PG_JOBS:-2}" -PG_SUPERUSER="${PG_SUPERUSER:-postgres}" -LD_PRELOAD_PATH="${LD_PRELOAD_PATH:-/home/lian/try/zvfs/src/libzvfs.so}" -PG_BIN_DIR="${PG_BIN_DIR:-$(dirname "$(command -v pgbench 2>/dev/null || true)")}" -USE_LD_PRELOAD_INIT="${USE_LD_PRELOAD_INIT:-1}" -USE_LD_PRELOAD_RUN="${USE_LD_PRELOAD_RUN:-1}" +# --------------------------- +# 固定配置(按需改这里) +# --------------------------- +PG_HOST="127.0.0.1" +PG_PORT="5432" +PG_DB="benchdb" +PG_SCALE="10" +PG_TIME="20" +PG_CLIENTS="2" +PG_SUPERUSER="postgres" +USE_LD_PRELOAD="1" +LD_PRELOAD_PATH="/home/lian/try/zvfs/src/libzvfs.so" + +# 可选:优先使用这个目录;为空时自动从 PATH 里找 +PG_BIN_DIR="/usr/lib/postgresql/12/bin" + +if [[ ! -x "${PG_BIN_DIR}/pgbench" ]]; then + PG_BIN_DIR="$(dirname "$(command -v pgbench 2>/dev/null || true)")" +fi if [[ -z "${PG_BIN_DIR}" || ! -x "${PG_BIN_DIR}/pgbench" ]]; then - echo "未找到 pgbench,请设置 PG_BIN_DIR 或把 pgbench 放到 PATH 中。" >&2 + echo "未找到 pgbench,请先安装 PostgreSQL 客户端或修正 PG_BIN_DIR。" >&2 exit 1 fi -run_pgbench_cmd() { - local use_preload="$1" - shift - if [[ "${use_preload}" == "1" ]]; then +run_pg_cmd() { + if [[ "${USE_LD_PRELOAD}" == "1" ]]; then sudo -u "${PG_SUPERUSER}" env LD_PRELOAD="${LD_PRELOAD_PATH}" "$@" else sudo -u "${PG_SUPERUSER}" "$@" fi } -echo "当前参数:" +echo "当前配置:" echo " host=${PG_HOST} port=${PG_PORT} db=${PG_DB}" -echo " scale=${PG_SCALE} clients=${PG_CLIENTS} jobs=${PG_JOBS} time=${PG_TIME}s" -echo " preload_init=${USE_LD_PRELOAD_INIT} preload_run=${USE_LD_PRELOAD_RUN}" +echo " scale=${PG_SCALE} clients=${PG_CLIENTS} time=${PG_TIME}s preload=${USE_LD_PRELOAD}" +echo -echo "[1/2] 初始化数据(pgbench -i)" -run_pgbench_cmd "${USE_LD_PRELOAD_INIT}" \ - "${PG_BIN_DIR}/pgbench" -h "${PG_HOST}" -p "${PG_PORT}" -i -s "${PG_SCALE}" "${PG_DB}" +echo "[1/2] pgbench 初始化(-i)" +run_pg_cmd "${PG_BIN_DIR}/pgbench" \ + -h "${PG_HOST}" -p "${PG_PORT}" -i -s "${PG_SCALE}" "${PG_DB}" -echo "[2/2] 执行压测(pgbench -T)" -run_pgbench_cmd "${USE_LD_PRELOAD_RUN}" \ - "${PG_BIN_DIR}/pgbench" -h "${PG_HOST}" -p "${PG_PORT}" \ - -c "${PG_CLIENTS}" -j "${PG_JOBS}" -T "${PG_TIME}" -P 5 "${PG_DB}" +echo "[2/2] pgbench 压测(-T)" +run_pg_cmd "${PG_BIN_DIR}/pgbench" \ + -h "${PG_HOST}" -p "${PG_PORT}" -c "${PG_CLIENTS}" -T "${PG_TIME}" "${PG_DB}" diff --git a/scripts/search_libzvfs.sh b/scripts/search_libzvfs.sh index 355e419..c65874f 100755 --- a/scripts/search_libzvfs.sh +++ b/scripts/search_libzvfs.sh @@ -1,4 +1,8 @@ -pgrep -u postgres -x postgres | while read p; do - echo "PID=$p" - sudo grep -m1 libzvfs /proc/$p/maps || echo " (no libzvfs)" +# pgrep -u postgres -x postgres | while read p; do +# echo "PID=$p" +# sudo grep -m1 libzvfs /proc/$p/maps || echo " (no libzvfs)" +# done + +for p in 185591 185633 185664; do +echo "== $p"; grep libzvfs /proc/$p/maps || echo "NO_LIB"; done \ No newline at end of file diff --git a/src/common/config.h b/src/common/config.h index c2e71fc..818f614 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -6,9 +6,11 @@ // dev -#define SPDK_JSON_PATH "/home/lian/try/zvfs/src/zvfsmalloc.json" -// #define ZVFS_BDEV "Nvme0n1" -#define ZVFS_BDEV "Malloc0" +// #define SPDK_JSON_PATH "/home/lian/try/zvfs/src/zvfsmalloc.json" +// #define ZVFS_BDEV "Malloc0" + +#define SPDK_JSON_PATH "/home/lian/try/zvfs/src/zvfsnvme.json" +#define ZVFS_BDEV "Nvme0n1" #define ZVFS_DMA_BUF_SIZE (1024 * 1024) #define ZVFS_WAIT_TIME 5000ULL diff --git a/src/daemon/spdk_engine.c b/src/daemon/spdk_engine.c index 2e7b075..f94c472 100644 --- a/src/daemon/spdk_engine.c +++ b/src/daemon/spdk_engine.c @@ -19,6 +19,7 @@ * 全局引擎状态 * ============================================================ */ struct zvfs_spdk_io_engine g_engine = {0}; +static _Atomic bool g_bs_resetting = false; /** =========================================================== * 内部辅助:时钟 @@ -108,8 +109,7 @@ static void json_app_load_done(int rc, void *arg) { } static int load_json_config(struct spdk_thread *thread, const char *json_file) { - const char *path = json_file ? json_file : getenv("SPDK_JSON_CONFIG"); - if (!path) path = SPDK_JSON_PATH; + const char *path = json_file ? json_file : SPDK_JSON_PATH; struct json_load_ctx ctx = {.done = false, .rc = 0}; spdk_subsystem_init_from_json_config(path, SPDK_DEFAULT_RPC_ADDR, @@ -387,6 +387,18 @@ static struct zvfs_io_thread *pick_io_thread(void) { return &g_engine.thread_pool[slot]; } +bool io_engine_reset_in_progress(void) { + return atomic_load(&g_bs_resetting); +} + +static bool engine_handle_cache_empty(void) { + bool empty; + pthread_mutex_lock(&g_engine.cache_mu); + empty = (g_engine.handle_cache == NULL); + pthread_mutex_unlock(&g_engine.cache_mu); + return empty; +} + /** =========================================================== * 内部操作上下文定义 * ============================================================ */ @@ -423,6 +435,10 @@ struct delete_ctx { struct zvfs_req *req; }; +struct reset_ctx { + struct zvfs_req *req; +}; + struct io_ctx { struct zvfs_req *req; struct zvfs_blob_handle *handle; @@ -809,6 +825,99 @@ int blob_delete(struct zvfs_req *req) { return 0; } +/** =========================================================== + * blobstore_reset(测试用途) + * destroy -> init + * ============================================================ */ +static void blobstore_reset_finish(struct reset_ctx *rctx, int status) { + struct zvfs_resp *resp = calloc(1, sizeof(*resp)); + if (!resp) { + SPDK_ERRLOG("blobstore_reset_finish: calloc resp failed\n"); + if (rctx->req) { + free(rctx->req); + } + free(rctx); + atomic_store(&g_bs_resetting, false); + return; + } + + resp->opcode = rctx->req->opcode; + resp->status = status; + resp->conn = rctx->req->conn; + + free(rctx->req); + free(rctx); + CQ_Push(g_cq, resp); + atomic_store(&g_bs_resetting, false); +} + +static void blobstore_reset_init_done_cb(void *arg, struct spdk_blob_store *bs, int bserrno) { + struct reset_ctx *rctx = arg; + if (bserrno != 0) { + SPDK_ERRLOG("blobstore_reset: bs_init failed: %d\n", bserrno); + blobstore_reset_finish(rctx, bserrno); + return; + } + + g_engine.bs = bs; + g_engine.io_unit_size = spdk_bs_get_io_unit_size(bs); + g_engine.cluster_size = spdk_bs_get_cluster_size(bs); + SPDK_NOTICELOG("blobstore_reset done: io_unit=%lu cluster=%lu\n", + g_engine.io_unit_size, g_engine.cluster_size); + blobstore_reset_finish(rctx, 0); +} + +static void blobstore_reset_destroy_done_cb(void *arg, int bserrno) { + struct reset_ctx *rctx = arg; + if (bserrno != 0) { + SPDK_ERRLOG("blobstore_reset: bs_destroy failed: %d\n", bserrno); + blobstore_reset_finish(rctx, bserrno); + return; + } + + g_engine.bs = NULL; + g_engine.io_unit_size = 0; + g_engine.cluster_size = 0; + + spdk_bs_init(g_engine.bs_dev, NULL, blobstore_reset_init_done_cb, rctx); +} + +static void do_blobstore_reset(void *arg) { + struct reset_ctx *rctx = arg; + if (!g_engine.bs || !g_engine.bs_dev) { + blobstore_reset_finish(rctx, -EIO); + return; + } + spdk_bs_destroy(g_engine.bs, blobstore_reset_destroy_done_cb, rctx); +} + +int blobstore_reset(struct zvfs_req *req) { + if (!req) { + return -EINVAL; + } + + if (atomic_exchange(&g_bs_resetting, true)) { + push_err_resp(req, -EALREADY); + return -EALREADY; + } + + if (!engine_handle_cache_empty()) { + atomic_store(&g_bs_resetting, false); + push_err_resp(req, -EBUSY); + return -EBUSY; + } + + struct reset_ctx *rctx = calloc(1, sizeof(*rctx)); + if (!rctx) { + atomic_store(&g_bs_resetting, false); + push_err_resp(req, -ENOMEM); + return -ENOMEM; + } + rctx->req = req; + spdk_thread_send_msg(get_md_thread()->thread, do_blobstore_reset, rctx); + return 0; +} + /** =========================================================== * blob_read * IO 操作分发到 io 线程,通过该线程专属的 channel 执行 @@ -1045,3 +1154,8 @@ int blob_write(struct zvfs_req *req) { spdk_thread_send_msg(iot->thread, do_blob_write, ioctx); return 0; } + + +/** =========================================================== + * Destroy + * ============================================================ */ diff --git a/src/daemon/spdk_engine.h b/src/daemon/spdk_engine.h index 27b4620..bc87997 100644 --- a/src/daemon/spdk_engine.h +++ b/src/daemon/spdk_engine.h @@ -64,5 +64,7 @@ int blob_resize(struct zvfs_req *req); int blob_sync_md(struct zvfs_req *req); int blob_close(struct zvfs_req *req); int blob_delete(struct zvfs_req *req); +int blobstore_reset(struct zvfs_req *req); +bool io_engine_reset_in_progress(void); #endif // __ZVFS_IO_ENGINE_H__ diff --git a/src/daemon/spdk_engine_wrapper.c b/src/daemon/spdk_engine_wrapper.c index 65b61b8..8b7e6b3 100644 --- a/src/daemon/spdk_engine_wrapper.c +++ b/src/daemon/spdk_engine_wrapper.c @@ -2,6 +2,7 @@ #include "spdk_engine.h" #include "ipc_cq.h" #include +#include extern struct zvfs_spdk_io_engine g_engine; @@ -179,7 +180,16 @@ static int zvfs_add_ref_batch(struct zvfs_req *req) { return 0; } +static int zvfs_reset_blobstore(struct zvfs_req *req) { + return blobstore_reset(req); +} + int dispatch_to_worker(struct zvfs_req *req){ + if (req->opcode != ZVFS_OP_RESET_BLOBSTORE && io_engine_reset_in_progress()) { + push_err_resp(req, -EBUSY); + return -EBUSY; + } + switch (req->opcode) { case ZVFS_OP_CREATE: @@ -202,6 +212,8 @@ int dispatch_to_worker(struct zvfs_req *req){ return zvfs_add_ref(req); case ZVFS_OP_ADD_REF_BATCH: return zvfs_add_ref_batch(req); + case ZVFS_OP_RESET_BLOBSTORE: + return zvfs_reset_blobstore(req); default: break; } diff --git a/src/daemon/zvfs_daemon b/src/daemon/zvfs_daemon index cd747a9..37cc852 100755 Binary files a/src/daemon/zvfs_daemon and b/src/daemon/zvfs_daemon differ diff --git a/src/hook/zvfs_hook_fd.c b/src/hook/zvfs_hook_fd.c index 0bb1807..937ec92 100644 --- a/src/hook/zvfs_hook_fd.c +++ b/src/hook/zvfs_hook_fd.c @@ -19,6 +19,97 @@ #include #include +/* ------------------------------------------------------------------ */ +/* 内部:open/openat 调试日志 */ +/* ------------------------------------------------------------------ */ + +static inline const char * +zvfs_dbg_str(const char *s) +{ + return s ? s : "(null)"; +} + +static int +zvfs_debug_open_enabled(void) +{ + static int inited = 0; + static int enabled = 0; + const char *v; + + if (!inited) { + v = getenv("ZVFS_DEBUG_OPEN"); + enabled = (v && v[0] != '\0' && strcmp(v, "0") != 0); + inited = 1; + } + return enabled; +} + +static const char * +zvfs_debug_open_match(void) +{ + static int inited = 0; + static const char *match = NULL; + + if (!inited) { + match = getenv("ZVFS_DEBUG_OPEN_MATCH"); + if (match && match[0] == '\0') { + match = NULL; + } + inited = 1; + } + return match; +} + +static int +zvfs_debug_open_should_log(const char *path1, const char *path2) +{ + const char *match; + + if (!zvfs_debug_open_enabled()) { + return 0; + } + + match = zvfs_debug_open_match(); + if (!match) { + return 1; + } + + if (path1 && strstr(path1, match)) { + return 1; + } + if (path2 && strstr(path2, match)) { + return 1; + } + return 0; +} + +static void +zvfs_debug_open_log(const char *path1, const char *path2, const char *fmt, ...) +{ + va_list ap; + + if (!zvfs_debug_open_should_log(path1, path2)) { + return; + } + + fprintf(stderr, "[zvfs][open-dbg][pid=%d][tid=%lu] ", + getpid(), (unsigned long)pthread_self()); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); +} + +static int +zvfs_debug_has_fd_mapping(int fd) +{ + int found = 0; + pthread_mutex_lock(&g_fs.fd_mu); + found = (openfile_lookup(fd) != NULL); + pthread_mutex_unlock(&g_fs.fd_mu); + return found; +} + /* ------------------------------------------------------------------ */ /* 内部:路径判定辅助 */ /* ------------------------------------------------------------------ */ @@ -104,6 +195,84 @@ zvfs_classify_path(const char *abspath, int may_create, return 1; } +/* ------------------------------------------------------------------ */ +/* 内部:fopen 模式解析 */ +/* ------------------------------------------------------------------ */ + +static int +zvfs_parse_fopen_mode(const char *mode, int extra_flags, int *flags_out, mode_t *create_mode_out) +{ + int flags = 0; + int plus = 0; + int excl = 0; + int cloexec = 0; + const char *p; + + if (!mode || !*mode || !flags_out || !create_mode_out) { + errno = EINVAL; + return -1; + } + + for (p = mode + 1; *p && *p != ','; ++p) { + if (*p == '+') plus = 1; + else if (*p == 'x') excl = 1; + else if (*p == 'e') cloexec = 1; + } + + switch (mode[0]) { + case 'r': + flags = plus ? O_RDWR : O_RDONLY; + break; + case 'w': + flags = (plus ? O_RDWR : O_WRONLY) | O_CREAT | O_TRUNC; + break; + case 'a': + flags = (plus ? O_RDWR : O_WRONLY) | O_CREAT | O_APPEND; + break; + default: + errno = EINVAL; + return -1; + } + + if (excl) { + flags |= O_EXCL; + } + if (cloexec) { + flags |= O_CLOEXEC; + } + flags |= extra_flags; + + *flags_out = flags; + *create_mode_out = 0666; + return 0; +} + +static void +zvfs_sanitize_fdopen_mode(const char *mode, char out[4]) +{ + int i = 0; + int plus = 0; + int binary = 0; + const char *p; + + out[0] = 'r'; + out[1] = '\0'; + + if (!mode || !*mode) { + return; + } + + for (p = mode + 1; *p && *p != ','; ++p) { + if (*p == '+') plus = 1; + else if (*p == 'b') binary = 1; + } + + out[i++] = mode[0]; + if (binary && i < 3) out[i++] = 'b'; + if (plus && i < 3) out[i++] = '+'; + out[i] = '\0'; +} + /* ------------------------------------------------------------------ */ /* 内部:open 的核心逻辑(路径已解析为绝对路径) */ /* ------------------------------------------------------------------ */ @@ -125,6 +294,10 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) uint64_t blob_id = 0; uint64_t handle_id = 0; + zvfs_debug_open_log(abspath, NULL, + "open_impl enter real_fd=%d path=%s flags=0x%x mode=%#o", + real_fd, zvfs_dbg_str(abspath), flags, (unsigned)mode); + if (flags & O_CREAT) { /* ---- 创建路径 -------------------------------------------- */ @@ -135,19 +308,41 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) fprintf(stderr, "[zvfs] create blob failed path=%s flags=0x%x errno=%d(%s)\n", abspath, flags, saved, strerror(saved)); + zvfs_debug_open_log(abspath, NULL, + "create branch blob_create fail errno=%d(%s)", + saved, strerror(saved)); errno = saved; goto fail; } + zvfs_debug_open_log(abspath, NULL, + "create branch blob_create ok blob_id=%lu handle_id=%lu", + (unsigned long)blob_id, (unsigned long)handle_id); /* 2. 把 blob_id 写入真实文件的 xattr */ - if (zvfs_xattr_write_blob_id(real_fd, blob_id) < 0) goto fail; + if (zvfs_xattr_write_blob_id(real_fd, blob_id) < 0) { + zvfs_debug_open_log(abspath, NULL, + "create branch xattr_write fail errno=%d(%s)", + errno, strerror(errno)); + goto fail; + } + zvfs_debug_open_log(abspath, NULL, "create branch xattr_write ok"); /* 3. logical_size = 0,让 st_size 也为 0 */ - if (real_ftruncate(real_fd, 0) < 0) goto fail; + if (real_ftruncate(real_fd, 0) < 0) { + zvfs_debug_open_log(abspath, NULL, + "create branch real_ftruncate(0) fail errno=%d(%s)", + errno, strerror(errno)); + goto fail; + } + zvfs_debug_open_log(abspath, NULL, "create branch real_ftruncate(0) ok"); /* 4. 分配 inode */ inode = inode_alloc(blob_id, mode ? mode : 0666, ZVFS_ITYPE_FILE); - if (!inode) { errno = ENOMEM; goto fail; } + if (!inode) { + errno = ENOMEM; + zvfs_debug_open_log(abspath, NULL, "create branch inode_alloc fail ENOMEM"); + goto fail; + } /* 5. 插入全局表 */ pthread_mutex_lock(&g_fs.inode_mu); @@ -158,6 +353,9 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) pthread_mutex_lock(&g_fs.path_mu); path_cache_insert(abspath, inode); pthread_mutex_unlock(&g_fs.path_mu); + zvfs_debug_open_log(abspath, NULL, + "create branch inode/path_cache inserted logical_size=%lu", + (unsigned long)inode->logical_size); } else { /* ---- 打开已有文件路径 ------------------------------------- */ @@ -169,21 +367,38 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) pthread_mutex_unlock(&g_fs.path_mu); if (inode) { + zvfs_debug_open_log(abspath, NULL, + "open existing path_cache hit inode_blob_id=%lu", + (unsigned long)inode->blob_id); /* path_cache 命中:直接用缓存的 inode,重新 blob_open */ blob_id = inode->blob_id; if (blob_open(blob_id, &handle_id) != 0) { if (errno == 0) errno = EIO; + zvfs_debug_open_log(abspath, NULL, + "open existing path_cache-hit blob_open fail errno=%d(%s)", + errno, strerror(errno)); goto fail; } /* 共享 inode,增加引用 */ atomic_fetch_add(&inode->ref_count, 1); + zvfs_debug_open_log(abspath, NULL, + "open existing path_cache-hit blob_open ok handle_id=%lu", + (unsigned long)handle_id); } else { + zvfs_debug_open_log(abspath, NULL, "open existing path_cache miss"); /* 未命中:从 xattr 读 blob_id,可能是进程首次 open */ if (zvfs_xattr_read_blob_id(real_fd, &blob_id) < 0) { /* xattr 不存在:不是 zvfs 管理的文件,降级透传 */ + int saved = errno; + zvfs_debug_open_log(abspath, NULL, + "open existing xattr_read miss errno=%d(%s), passthrough real_fd=%d", + saved, strerror(saved), real_fd); return real_fd; /* 直接返回,不做任何包装 */ } + zvfs_debug_open_log(abspath, NULL, + "open existing xattr_read ok blob_id=%lu", + (unsigned long)blob_id); /* 再查 inode_table(另一个 fd 可能已经 open 但路径未缓存)*/ pthread_mutex_lock(&g_fs.inode_mu); @@ -191,18 +406,37 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) pthread_mutex_unlock(&g_fs.inode_mu); if (inode) { + zvfs_debug_open_log(abspath, NULL, + "open existing inode_table hit blob_id=%lu", + (unsigned long)blob_id); if (blob_open(blob_id, &handle_id) != 0) { if (errno == 0) errno = EIO; + zvfs_debug_open_log(abspath, NULL, + "open existing inode_table-hit blob_open fail errno=%d(%s)", + errno, strerror(errno)); goto fail; } atomic_fetch_add(&inode->ref_count, 1); + zvfs_debug_open_log(abspath, NULL, + "open existing inode_table-hit blob_open ok handle_id=%lu", + (unsigned long)handle_id); } else { /* 全新 inode:需从真实文件 stat 获取 mode/size */ struct stat st; - if (zvfs_real_fstat(real_fd, &st) < 0) goto fail; + if (zvfs_real_fstat(real_fd, &st) < 0) { + zvfs_debug_open_log(abspath, NULL, + "open existing fstat fail errno=%d(%s)", + errno, strerror(errno)); + goto fail; + } inode = inode_alloc(blob_id, st.st_mode, ZVFS_ITYPE_FILE); - if (!inode) { errno = ENOMEM; goto fail; } + if (!inode) { + errno = ENOMEM; + zvfs_debug_open_log(abspath, NULL, + "open existing inode_alloc fail ENOMEM"); + goto fail; + } inode->logical_size = (uint64_t)st.st_size; pthread_mutex_lock(&g_fs.inode_mu); @@ -214,8 +448,15 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) pthread_mutex_unlock(&g_fs.path_mu); if (blob_open(blob_id, &handle_id) != 0) { if (errno == 0) errno = EIO; + zvfs_debug_open_log(abspath, NULL, + "open existing new-inode blob_open fail errno=%d(%s)", + errno, strerror(errno)); goto fail; } + zvfs_debug_open_log(abspath, NULL, + "open existing new-inode ready handle_id=%lu logical_size=%lu", + (unsigned long)handle_id, + (unsigned long)inode->logical_size); } } } @@ -227,6 +468,11 @@ zvfs_open_impl(int real_fd, const char *abspath, int flags, mode_t mode) pthread_mutex_lock(&g_fs.fd_mu); openfile_insert(of); pthread_mutex_unlock(&g_fs.fd_mu); + zvfs_debug_open_log(abspath, NULL, + "open_impl success real_fd=%d handle_id=%lu inode_blob_id=%lu", + real_fd, + (unsigned long)handle_id, + (unsigned long)(inode ? inode->blob_id : 0)); return real_fd; @@ -235,6 +481,9 @@ fail_handle: blob_close(handle_id); } fail: + zvfs_debug_open_log(abspath, NULL, + "open_impl fail errno=%d(%s) real_fd=%d", + errno, strerror(errno), real_fd); /* inode 若刚分配(ref_count==1)需要回滚 */ if (inode && atomic_load(&inode->ref_count) == 1) { pthread_mutex_lock(&g_fs.inode_mu); @@ -259,6 +508,8 @@ open(const char *path, int flags, ...) char abspath[PATH_MAX]; char normpath[PATH_MAX]; + abspath[0] = '\0'; + normpath[0] = '\0'; int is_zvfs_path = 0; mode_t mode = 0; @@ -272,11 +523,26 @@ open(const char *path, int flags, ...) if (zvfs_resolve_atpath(AT_FDCWD, path, abspath, sizeof(abspath)) == 0) { is_zvfs_path = zvfs_classify_path(abspath, (flags & O_CREAT) != 0, normpath, sizeof(normpath)); + zvfs_debug_open_log(path, abspath, + "open resolve ok path=%s abspath=%s norm=%s flags=0x%x is_zvfs=%d", + zvfs_dbg_str(path), zvfs_dbg_str(abspath), + zvfs_dbg_str(normpath), flags, is_zvfs_path); + } else { + zvfs_debug_open_log(path, NULL, + "open resolve fail path=%s flags=0x%x errno=%d(%s)", + zvfs_dbg_str(path), flags, errno, strerror(errno)); } int ret; if (ZVFS_IN_HOOK() || !is_zvfs_path) { + zvfs_debug_open_log(path, abspath, + "open passthrough reason=%s path=%s flags=0x%x", + ZVFS_IN_HOOK() ? "reentrant" : "non-zvfs", + zvfs_dbg_str(path), flags); ret = real_open(path, flags, mode); + zvfs_debug_open_log(path, abspath, + "open passthrough ret=%d errno=%d(%s)", + ret, (ret < 0) ? errno : 0, (ret < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return ret; } @@ -285,13 +551,28 @@ open(const char *path, int flags, ...) /* 先让真实 FS 创建 / 打开文件(获得 real_fd) */ int real_fd = real_open(path, flags, mode); - if (real_fd < 0) { ZVFS_HOOK_LEAVE(); return -1; } + if (real_fd < 0) { + zvfs_debug_open_log(path, abspath, + "open real_open fail path=%s flags=0x%x errno=%d(%s)", + zvfs_dbg_str(path), flags, errno, strerror(errno)); + ZVFS_HOOK_LEAVE(); + return -1; + } + zvfs_debug_open_log(path, abspath, + "open real_open ok real_fd=%d path=%s norm=%s", + real_fd, zvfs_dbg_str(path), zvfs_dbg_str(normpath)); ret = zvfs_open_impl(real_fd, normpath, flags, mode); if (ret < 0) { int saved = errno; real_close(real_fd); errno = saved; + zvfs_debug_open_log(path, abspath, + "open zvfs_open_impl fail real_fd=%d errno=%d(%s)", + real_fd, saved, strerror(saved)); + } else { + zvfs_debug_open_log(path, abspath, + "open zvfs_open_impl success fd=%d", ret); } ZVFS_HOOK_LEAVE(); @@ -319,6 +600,9 @@ openat(int dirfd, const char *path, int flags, ...) ZVFS_HOOK_ENTER(); char normpath[PATH_MAX]; + char abspath[PATH_MAX]; + normpath[0] = '\0'; + abspath[0] = '\0'; int is_zvfs_path = 0; mode_t mode = 0; @@ -329,17 +613,30 @@ openat(int dirfd, const char *path, int flags, ...) } /* 解析绝对路径判断是否属于 zvfs */ - char abspath[PATH_MAX]; if (zvfs_resolve_atpath(dirfd, path, abspath, sizeof(abspath)) < 0) { + zvfs_debug_open_log(path, NULL, + "openat resolve fail dirfd=%d path=%s flags=0x%x errno=%d(%s)", + dirfd, zvfs_dbg_str(path), flags, errno, strerror(errno)); ZVFS_HOOK_LEAVE(); return -1; } is_zvfs_path = zvfs_classify_path(abspath, (flags & O_CREAT) != 0, normpath, sizeof(normpath)); + zvfs_debug_open_log(path, abspath, + "openat resolve ok dirfd=%d path=%s abspath=%s norm=%s flags=0x%x is_zvfs=%d", + dirfd, zvfs_dbg_str(path), zvfs_dbg_str(abspath), + zvfs_dbg_str(normpath), flags, is_zvfs_path); int ret; if (ZVFS_IN_HOOK() || !is_zvfs_path) { + zvfs_debug_open_log(path, abspath, + "openat passthrough reason=%s dirfd=%d path=%s flags=0x%x", + ZVFS_IN_HOOK() ? "reentrant" : "non-zvfs", + dirfd, zvfs_dbg_str(path), flags); ret = real_openat(dirfd, path, flags, mode); + zvfs_debug_open_log(path, abspath, + "openat passthrough ret=%d errno=%d(%s)", + ret, (ret < 0) ? errno : 0, (ret < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return ret; } @@ -347,13 +644,28 @@ openat(int dirfd, const char *path, int flags, ...) zvfs_ensure_init(); int real_fd = real_openat(dirfd, path, flags, mode); - if (real_fd < 0) { ZVFS_HOOK_LEAVE(); return -1; } + if (real_fd < 0) { + zvfs_debug_open_log(path, abspath, + "openat real_openat fail dirfd=%d path=%s flags=0x%x errno=%d(%s)", + dirfd, zvfs_dbg_str(path), flags, errno, strerror(errno)); + ZVFS_HOOK_LEAVE(); + return -1; + } + zvfs_debug_open_log(path, abspath, + "openat real_openat ok real_fd=%d dirfd=%d path=%s norm=%s", + real_fd, dirfd, zvfs_dbg_str(path), zvfs_dbg_str(normpath)); ret = zvfs_open_impl(real_fd, normpath, flags, mode); if (ret < 0) { int saved = errno; real_close(real_fd); errno = saved; + zvfs_debug_open_log(path, abspath, + "openat zvfs_open_impl fail real_fd=%d errno=%d(%s)", + real_fd, saved, strerror(saved)); + } else { + zvfs_debug_open_log(path, abspath, + "openat zvfs_open_impl success fd=%d", ret); } ZVFS_HOOK_LEAVE(); @@ -371,6 +683,102 @@ int openat64(int dirfd, const char *path, int flags, ...) return openat(dirfd, path, flags | O_LARGEFILE, mode); } +/* ------------------------------------------------------------------ */ +/* fopen / fopen64 */ +/* ------------------------------------------------------------------ */ + +static FILE * +zvfs_fopen_common(const char *path, const char *mode, int extra_open_flags, int use_fopen64) +{ + char abspath[PATH_MAX]; + char normpath[PATH_MAX]; + char fdopen_mode[4]; + int is_zvfs_path = 0; + int flags = 0; + mode_t create_mode = 0666; + int real_fd = -1; + FILE *fp = NULL; + + if (zvfs_parse_fopen_mode(mode, extra_open_flags, &flags, &create_mode) != 0) { + if (use_fopen64 && real_fopen64) return real_fopen64(path, mode); + if (real_fopen) return real_fopen(path, mode); + errno = ENOSYS; + return NULL; + } + + if (zvfs_resolve_atpath(AT_FDCWD, path, abspath, sizeof(abspath)) == 0) { + is_zvfs_path = zvfs_classify_path(abspath, (flags & O_CREAT) != 0, + normpath, sizeof(normpath)); + zvfs_debug_open_log(path, abspath, + "fopen resolve ok path=%s mode=%s norm=%s flags=0x%x is_zvfs=%d", + zvfs_dbg_str(path), zvfs_dbg_str(mode), + zvfs_dbg_str(normpath), flags, is_zvfs_path); + } else { + zvfs_debug_open_log(path, NULL, + "fopen resolve fail path=%s mode=%s errno=%d(%s)", + zvfs_dbg_str(path), zvfs_dbg_str(mode), errno, strerror(errno)); + } + + if (ZVFS_IN_HOOK() || !is_zvfs_path) { + if (use_fopen64 && real_fopen64) return real_fopen64(path, mode); + if (real_fopen) return real_fopen(path, mode); + errno = ENOSYS; + return NULL; + } + + zvfs_ensure_init(); + + real_fd = real_open(path, flags, create_mode); + if (real_fd < 0) { + return NULL; + } + + if (zvfs_open_impl(real_fd, normpath, flags, create_mode) < 0) { + int saved = errno; + real_close(real_fd); + errno = saved; + return NULL; + } + zvfs_debug_open_log(path, normpath, + "fopen mapped-after-open_impl fd=%d mapped=%d", + real_fd, zvfs_debug_has_fd_mapping(real_fd)); + + zvfs_sanitize_fdopen_mode(mode, fdopen_mode); + if (real_fdopen) { + fp = real_fdopen(real_fd, fdopen_mode); + } else { + fp = fdopen(real_fd, fdopen_mode); + } + if (!fp) { + int saved = errno; + close(real_fd); + errno = saved; + return NULL; + } + zvfs_debug_open_log(path, normpath, + "fopen mapped-after-fdopen fd=%d mapped=%d", + real_fd, zvfs_debug_has_fd_mapping(real_fd)); + return fp; +} + +FILE * +fopen(const char *path, const char *mode) +{ + ZVFS_HOOK_ENTER(); + FILE *fp = zvfs_fopen_common(path, mode, 0, 0); + ZVFS_HOOK_LEAVE(); + return fp; +} + +FILE * +fopen64(const char *path, const char *mode) +{ + ZVFS_HOOK_ENTER(); + FILE *fp = zvfs_fopen_common(path, mode, O_LARGEFILE, 1); + ZVFS_HOOK_LEAVE(); + return fp; +} + /* ------------------------------------------------------------------ */ /* creat */ /* ------------------------------------------------------------------ */ @@ -411,6 +819,28 @@ int __open64(const char *path, int flags, ...) return open64(path, flags, mode); } +int __openat(int dirfd, const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return openat(dirfd, path, flags, mode); +} + +int __openat64(int dirfd, const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return openat64(dirfd, path, flags, mode); +} + int __libc_open(const char *path, int flags, ...) { mode_t mode = 0; @@ -422,6 +852,109 @@ int __libc_open(const char *path, int flags, ...) return open(path, flags, mode); } +int __libc_open64(const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return open64(path, flags, mode); +} + +int __libc_openat(int dirfd, const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return openat(dirfd, path, flags, mode); +} + +int __libc_openat64(int dirfd, const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return openat64(dirfd, path, flags, mode); +} + +int __open_2(const char *path, int flags) +{ + zvfs_debug_open_log(path, NULL, + "__open_2 called path=%s flags=0x%x", + zvfs_dbg_str(path), flags); + return open(path, flags); +} + +int __open64_2(const char *path, int flags) +{ + return open64(path, flags); +} + +int __openat_2(int dirfd, const char *path, int flags) +{ + zvfs_debug_open_log(path, NULL, + "__openat_2 called dirfd=%d path=%s flags=0x%x", + dirfd, zvfs_dbg_str(path), flags); + return openat(dirfd, path, flags); +} + +int __openat64_2(int dirfd, const char *path, int flags) +{ + return openat64(dirfd, path, flags); +} + +int __open_nocancel(const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return open(path, flags, mode); +} + +int __open64_nocancel(const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return open64(path, flags, mode); +} + +int __openat_nocancel(int dirfd, const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return openat(dirfd, path, flags, mode); +} + +int __openat64_nocancel(int dirfd, const char *path, int flags, ...) +{ + mode_t mode = 0; + if (flags & O_CREAT) { + va_list ap; va_start(ap, flags); + mode = (mode_t)va_arg(ap, unsigned int); + va_end(ap); + } + return openat64(dirfd, path, flags, mode); +} + /* ------------------------------------------------------------------ */ /* close */ /* ------------------------------------------------------------------ */ diff --git a/src/hook/zvfs_hook_fd.h b/src/hook/zvfs_hook_fd.h index 750587f..464966a 100644 --- a/src/hook/zvfs_hook_fd.h +++ b/src/hook/zvfs_hook_fd.h @@ -4,6 +4,7 @@ #include #include #include +#include /** * open / creat: @@ -32,6 +33,8 @@ int openat(int dirfd, const char *path, int flags, ...); int openat64(int dirfd, const char *path, int flags, ...); int creat(const char *path, mode_t mode); int creat64(const char *path, mode_t mode); +FILE *fopen(const char *path, const char *mode); +FILE *fopen64(const char *path, const char *mode); /* close 族 */ int close(int fd); @@ -49,7 +52,20 @@ int zvfs_dup_attach_newfd(int oldfd, int newfd, int new_fd_flags); /* glibc 内部别名(与 open/close 实现体共享逻辑,转发即可) */ int __open(const char *path, int flags, ...); int __open64(const char *path, int flags, ...); +int __openat(int dirfd, const char *path, int flags, ...); +int __openat64(int dirfd, const char *path, int flags, ...); int __libc_open(const char *path, int flags, ...); +int __libc_open64(const char *path, int flags, ...); +int __libc_openat(int dirfd, const char *path, int flags, ...); +int __libc_openat64(int dirfd, const char *path, int flags, ...); +int __open_2(const char *path, int flags); +int __open64_2(const char *path, int flags); +int __openat_2(int dirfd, const char *path, int flags); +int __openat64_2(int dirfd, const char *path, int flags); +int __open_nocancel(const char *path, int flags, ...); +int __open64_nocancel(const char *path, int flags, ...); +int __openat_nocancel(int dirfd, const char *path, int flags, ...); +int __openat64_nocancel(int dirfd, const char *path, int flags, ...); int __close(int fd); int __libc_close(int fd); diff --git a/src/hook/zvfs_hook_init.c b/src/hook/zvfs_hook_init.c index 2fdd607..07bd558 100644 --- a/src/hook/zvfs_hook_init.c +++ b/src/hook/zvfs_hook_init.c @@ -138,6 +138,11 @@ int (*real___close)(int) = NULL; int (*real___libc_close)(int) = NULL; size_t (*real_fread_unlocked)(void *, size_t, size_t, FILE *) = NULL; size_t (*real_fread)(void *, size_t, size_t, FILE *) = NULL; +int (*real_vfscanf)(FILE *, const char *, va_list) = NULL; +int (*real___isoc99_vfscanf)(FILE *, const char *, va_list) = NULL; +FILE *(*real_fopen)(const char *, const char *) = NULL; +FILE *(*real_fopen64)(const char *, const char *) = NULL; +FILE *(*real_fdopen)(int, const char *) = NULL; /* ------------------------------------------------------------------ */ /* dlsym 辅助宏 */ @@ -256,6 +261,11 @@ void zvfs_hook_init(void) LOAD_SYM_OPTIONAL(real___libc_close, "__libc_close"); LOAD_SYM_OPTIONAL(real_fread_unlocked, "fread_unlocked"); LOAD_SYM_OPTIONAL(real_fread, "fread"); + LOAD_SYM_OPTIONAL(real_vfscanf, "vfscanf"); + LOAD_SYM_OPTIONAL(real___isoc99_vfscanf, "__isoc99_vfscanf"); + LOAD_SYM_OPTIONAL(real_fopen, "fopen"); + LOAD_SYM_OPTIONAL(real_fopen64, "fopen64"); + LOAD_SYM_OPTIONAL(real_fdopen, "fdopen"); /* 初始化全局 fs 结构 */ zvfs_fs_init(); diff --git a/src/hook/zvfs_hook_init.h b/src/hook/zvfs_hook_init.h index 64b81d9..7429f86 100644 --- a/src/hook/zvfs_hook_init.h +++ b/src/hook/zvfs_hook_init.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -138,6 +139,11 @@ extern int (*real___close)(int fd); extern int (*real___libc_close)(int fd); extern size_t (*real_fread_unlocked)(void *ptr, size_t size, size_t nmemb, FILE *stream); extern size_t (*real_fread)(void *ptr, size_t size, size_t nmemb, FILE *stream); +extern int (*real_vfscanf)(FILE *stream, const char *format, va_list ap); +extern int (*real___isoc99_vfscanf)(FILE *stream, const char *format, va_list ap); +extern FILE *(*real_fopen)(const char *path, const char *mode); +extern FILE *(*real_fopen64)(const char *path, const char *mode); +extern FILE *(*real_fdopen)(int fd, const char *mode); /* 初始化所有 real_* 指针,在 constructor 中调用 */ void zvfs_hook_init(void); diff --git a/src/hook/zvfs_hook_rw.c b/src/hook/zvfs_hook_rw.c index cd1e245..ba5be1a 100644 --- a/src/hook/zvfs_hook_rw.c +++ b/src/hook/zvfs_hook_rw.c @@ -14,12 +14,110 @@ #include #include #include +#include #include #include #include #include #include +/* ------------------------------------------------------------------ */ +/* 内部:read/pread 调试日志 */ +/* ------------------------------------------------------------------ */ + +static int +zvfs_debug_rw_enabled(void) +{ + static int inited = 0; + static int enabled = 0; + const char *v; + + if (!inited) { + v = getenv("ZVFS_DEBUG_RW"); + enabled = (v && v[0] != '\0' && strcmp(v, "0") != 0); + inited = 1; + } + return enabled; +} + +static int +zvfs_debug_rw_fd_match(int fd) +{ + static int inited = 0; + static int has_filter = 0; + static int filter_fd = -1; + const char *v; + char *end = NULL; + long parsed; + + if (!inited) { + v = getenv("ZVFS_DEBUG_RW_FD"); + if (v && v[0] != '\0') { + parsed = strtol(v, &end, 10); + if (end && *end == '\0' && parsed >= 0 && parsed <= INT_MAX) { + has_filter = 1; + filter_fd = (int)parsed; + } + } + inited = 1; + } + + if (!has_filter) { + return 1; + } + return fd == filter_fd; +} + +static void +zvfs_debug_rw_log(int fd, const char *fmt, ...) +{ + va_list ap; + + if (!zvfs_debug_rw_enabled() || !zvfs_debug_rw_fd_match(fd)) { + return; + } + + fprintf(stderr, "[zvfs][rw-dbg][pid=%d][tid=%lu][fd=%d] ", + getpid(), (unsigned long)pthread_self(), fd); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fputc('\n', stderr); +} + +static const char * +zvfs_debug_fd_target(int fd) +{ + static __thread char target[PATH_MAX]; + char linkpath[64]; + ssize_t n; + + if (fd < 0) { + return "(invalid-fd)"; + } + + snprintf(linkpath, sizeof(linkpath), "/proc/self/fd/%d", fd); + n = readlink(linkpath, target, sizeof(target) - 1); + if (n < 0) { + return "(unknown)"; + } + target[n] = '\0'; + return target; +} + +static uint64_t +zvfs_debug_logical_size(struct zvfs_open_file *of) +{ + uint64_t size; + if (!of || !of->inode) { + return 0; + } + pthread_mutex_lock(&of->inode->mu); + size = of->inode->logical_size; + pthread_mutex_unlock(&of->inode->mu); + return size; +} + /* ------------------------------------------------------------------ */ /* 内部:单段 pread / pwrite(不修改 of->offset) */ /* ------------------------------------------------------------------ */ @@ -206,9 +304,17 @@ zvfs_fread_impl(void *ptr, size_t size, size_t nmemb, FILE *stream, int unlocked ZVFS_HOOK_ENTER(); int fd = stream ? fileno(stream) : -1; + int in_hook = ZVFS_IN_HOOK(); struct zvfs_open_file *of = NULL; + if (!in_hook && fd >= 0) { + of = get_of(fd); + } - if (ZVFS_IN_HOOK() || fd < 0 || !(of = get_of(fd))) { + if (in_hook || fd < 0 || !of) { + zvfs_debug_rw_log(fd, + "fread passthrough reason=%s unlocked=%d size=%zu nmemb=%zu target=%s", + in_hook ? "reentrant" : (fd < 0 ? "bad_fd" : "fd_not_zvfs"), + unlocked, size, nmemb, zvfs_debug_fd_target(fd)); size_t r = 0; if (unlocked) { if (real_fread_unlocked) r = real_fread_unlocked(ptr, size, nmemb, stream); @@ -219,10 +325,19 @@ zvfs_fread_impl(void *ptr, size_t size, size_t nmemb, FILE *stream, int unlocked else if (real_fread_unlocked) r = real_fread_unlocked(ptr, size, nmemb, stream); else errno = ENOSYS; } + zvfs_debug_rw_log(fd, + "fread passthrough ret=%zu errno=%d(%s)", + r, errno, strerror(errno)); ZVFS_HOOK_LEAVE(); return r; } + zvfs_debug_rw_log(fd, + "fread hooked unlocked=%d size=%zu nmemb=%zu offset=%lu handle_id=%lu logical_size=%lu target=%s", + unlocked, size, nmemb, + (unsigned long)of->offset, (unsigned long)of->handle_id, + (unsigned long)zvfs_debug_logical_size(of), + zvfs_debug_fd_target(fd)); zvfs_ensure_init(); if (size == 0 || nmemb == 0) { @@ -246,10 +361,149 @@ zvfs_fread_impl(void *ptr, size_t size, size_t nmemb, FILE *stream, int unlocked } else if ((size_t)n < total) { stream->_flags |= _IO_EOF_SEEN; } + zvfs_debug_rw_log(fd, + "fread hooked ret_bytes=%zd ret_nmemb=%zu new_offset=%lu errno=%d(%s)", + n, (n <= 0) ? 0 : ((size_t)n / size), + (unsigned long)of->offset, + (n < 0) ? errno : 0, (n < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return (n <= 0) ? 0 : ((size_t)n / size); } +static int +zvfs_vfscanf_passthrough(FILE *stream, const char *format, va_list ap, int use_isoc99) +{ + if (use_isoc99 && real___isoc99_vfscanf) { + return real___isoc99_vfscanf(stream, format, ap); + } + if (real_vfscanf) { + return real_vfscanf(stream, format, ap); + } + return vfscanf(stream, format, ap); +} + +static int +zvfs_vfscanf_impl(FILE *stream, const char *format, va_list ap, int use_isoc99) +{ + ZVFS_HOOK_ENTER(); + + int fd = stream ? fileno(stream) : -1; + int in_hook = ZVFS_IN_HOOK(); + struct zvfs_open_file *of = NULL; + int ret = EOF; + + if (!in_hook && fd >= 0) { + of = get_of(fd); + } + + if (in_hook || fd < 0 || !of) { + zvfs_debug_rw_log(fd, + "fscanf passthrough reason=%s isoc99=%d format=%s target=%s", + in_hook ? "reentrant" : (fd < 0 ? "bad_fd" : "fd_not_zvfs"), + use_isoc99, format ? format : "(null)", zvfs_debug_fd_target(fd)); + ret = zvfs_vfscanf_passthrough(stream, format, ap, use_isoc99); + zvfs_debug_rw_log(fd, "fscanf passthrough ret=%d errno=%d(%s)", + ret, errno, strerror(errno)); + ZVFS_HOOK_LEAVE(); + return ret; + } + + zvfs_ensure_init(); + + if (!format) { + errno = EINVAL; + stream->_flags |= _IO_ERR_SEEN; + ZVFS_HOOK_LEAVE(); + return EOF; + } + + uint64_t cur_off = of->offset; + uint64_t logical_size = zvfs_debug_logical_size(of); + uint64_t remain64 = (cur_off < logical_size) ? (logical_size - cur_off) : 0; + if (remain64 == 0) { + stream->_flags |= _IO_EOF_SEEN; + ZVFS_HOOK_LEAVE(); + return EOF; + } + if (remain64 > (uint64_t)(SIZE_MAX - 1)) { + /* 防止超大文件触发巨量分配,退回 libc 路径。 */ + ret = zvfs_vfscanf_passthrough(stream, format, ap, use_isoc99); + ZVFS_HOOK_LEAVE(); + return ret; + } + + size_t remain = (size_t)remain64; + char *buf = (char *)malloc(remain + 1); + if (!buf) { + errno = ENOMEM; + stream->_flags |= _IO_ERR_SEEN; + ZVFS_HOOK_LEAVE(); + return EOF; + } + + ssize_t n = zvfs_pread_impl(of, buf, remain, cur_off); + if (n < 0) { + free(buf); + stream->_flags |= _IO_ERR_SEEN; + ZVFS_HOOK_LEAVE(); + return EOF; + } + if (n == 0) { + free(buf); + stream->_flags |= _IO_EOF_SEEN; + ZVFS_HOOK_LEAVE(); + return EOF; + } + buf[n] = '\0'; + + FILE *mem = fmemopen(buf, (size_t)n, "r"); + if (!mem) { + int saved = errno; + free(buf); + errno = saved; + stream->_flags |= _IO_ERR_SEEN; + ZVFS_HOOK_LEAVE(); + return EOF; + } + + zvfs_debug_rw_log(fd, + "fscanf hooked isoc99=%d format=%s offset=%lu logical_size=%lu target=%s", + use_isoc99, format, + (unsigned long)cur_off, (unsigned long)logical_size, + zvfs_debug_fd_target(fd)); + + ret = zvfs_vfscanf_passthrough(mem, format, ap, use_isoc99); + long consumed = ftell(mem); + if (consumed > 0) { + of->offset = cur_off + (uint64_t)consumed; + } + + fclose(mem); + free(buf); + + if (ret == EOF && consumed <= 0) { + stream->_flags |= _IO_EOF_SEEN; + } + + zvfs_debug_rw_log(fd, + "fscanf hooked ret=%d consumed=%ld new_offset=%lu errno=%d(%s)", + ret, consumed, (unsigned long)of->offset, errno, strerror(errno)); + ZVFS_HOOK_LEAVE(); + return ret; +} + +#ifdef fscanf +#undef fscanf +#endif +int fscanf(FILE *stream, const char *format, ...) +{ + va_list ap; + va_start(ap, format); + int ret = zvfs_vfscanf_impl(stream, format, ap, 1); + va_end(ap); + return ret; +} + /* ------------------------------------------------------------------ */ /* read */ /* ------------------------------------------------------------------ */ @@ -259,18 +513,37 @@ read(int fd, void *buf, size_t count) { ZVFS_HOOK_ENTER(); - struct zvfs_open_file *of = NULL; - if (ZVFS_IN_HOOK() || !(of = get_of(fd))) { + int in_hook = ZVFS_IN_HOOK(); + struct zvfs_open_file *of = get_of(fd); + + if (!of) { + zvfs_debug_rw_log(fd, + "read passthrough reason=%s count=%zu target=%s", + in_hook ? "reentrant_fd_not_zvfs" : "fd_not_zvfs", + count, zvfs_debug_fd_target(fd)); ssize_t r = real_read(fd, buf, count); + zvfs_debug_rw_log(fd, + "read passthrough ret=%zd errno=%d(%s)", + r, (r < 0) ? errno : 0, (r < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return r; } + zvfs_debug_rw_log(fd, + "read hooked count=%zu offset=%lu handle_id=%lu logical_size=%lu target=%s", + count, (unsigned long)of->offset, + (unsigned long)of->handle_id, + (unsigned long)zvfs_debug_logical_size(of), + zvfs_debug_fd_target(fd)); zvfs_ensure_init(); ssize_t r = zvfs_pread_impl(of, buf, count, of->offset); if (r > 0) of->offset += (uint64_t)r; + zvfs_debug_rw_log(fd, + "read hooked ret=%zd new_offset=%lu errno=%d(%s)", + r, (unsigned long)of->offset, + (r < 0) ? errno : 0, (r < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return r; @@ -297,16 +570,34 @@ pread(int fd, void *buf, size_t count, off_t offset) { ZVFS_HOOK_ENTER(); - struct zvfs_open_file *of = NULL; - if (ZVFS_IN_HOOK() || !(of = get_of(fd))) { + int in_hook = ZVFS_IN_HOOK(); + struct zvfs_open_file *of = get_of(fd); + + if (!of) { + zvfs_debug_rw_log(fd, + "pread passthrough reason=%s count=%zu offset=%lld target=%s", + in_hook ? "reentrant_fd_not_zvfs" : "fd_not_zvfs", + count, (long long)offset, zvfs_debug_fd_target(fd)); ssize_t r = real_pread(fd, buf, count, offset); + zvfs_debug_rw_log(fd, + "pread passthrough ret=%zd errno=%d(%s)", + r, (r < 0) ? errno : 0, (r < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return r; } + zvfs_debug_rw_log(fd, + "pread hooked count=%zu offset=%lld handle_id=%lu logical_size=%lu target=%s", + count, (long long)offset, + (unsigned long)of->handle_id, + (unsigned long)zvfs_debug_logical_size(of), + zvfs_debug_fd_target(fd)); zvfs_ensure_init(); ssize_t r = zvfs_pread_impl(of, buf, count, (uint64_t)offset); + zvfs_debug_rw_log(fd, + "pread hooked ret=%zd errno=%d(%s)", + r, (r < 0) ? errno : 0, (r < 0) ? strerror(errno) : "OK"); ZVFS_HOOK_LEAVE(); return r; } diff --git a/src/hook/zvfs_hook_rw.h b/src/hook/zvfs_hook_rw.h index ca18484..9a7a586 100644 --- a/src/hook/zvfs_hook_rw.h +++ b/src/hook/zvfs_hook_rw.h @@ -58,5 +58,6 @@ ssize_t __write(int fd, const void *buf, size_t count); ssize_t __libc_write(int fd, const void *buf, size_t count); size_t fread_unlocked(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); +int fscanf(FILE *stream, const char *format, ...); #endif // __ZVFS_HOOK_RW_H__ diff --git a/src/proto/ipc_proto.c b/src/proto/ipc_proto.c index 14ee947..72ffe6d 100644 --- a/src/proto/ipc_proto.c +++ b/src/proto/ipc_proto.c @@ -51,7 +51,7 @@ static int read_u64(const uint8_t **p, size_t *remaining, uint64_t *v) { } static int valid_opcode(uint32_t opcode) { - return opcode >= ZVFS_OP_CREATE && opcode <= ZVFS_OP_ADD_REF_BATCH; + return opcode >= ZVFS_OP_CREATE && opcode <= ZVFS_OP_RESET_BLOBSTORE; } /* -------------------- header -------------------- */ @@ -730,11 +730,14 @@ size_t zvfs_serialize_req(struct zvfs_req *req, uint8_t *buf, size_t buf_len) { buf_len - ZVFS_REQ_HEADER_WIRE_SIZE); break; } + case ZVFS_OP_RESET_BLOBSTORE: + body_len = 0; + break; default: return 0; } - if (body_len == 0) { + if (body_len == 0 && req->opcode != ZVFS_OP_RESET_BLOBSTORE) { return 0; } @@ -864,6 +867,12 @@ size_t zvfs_deserialize_req(uint8_t *buf, size_t buf_len, struct zvfs_req *req) } break; } + case ZVFS_OP_RESET_BLOBSTORE: + if (header.payload_len != 0) { + return 0; + } + consumed = 0; + break; default: return 0; } @@ -937,6 +946,7 @@ size_t zvfs_serialize_resp(struct zvfs_resp *resp, uint8_t *buf, size_t buf_len) case ZVFS_OP_DELETE: case ZVFS_OP_ADD_REF: case ZVFS_OP_ADD_REF_BATCH: + case ZVFS_OP_RESET_BLOBSTORE: body_len = 0; break; default: @@ -1035,6 +1045,7 @@ size_t zvfs_deserialize_resp(uint8_t *buf, size_t buf_len, struct zvfs_resp *res case ZVFS_OP_DELETE: case ZVFS_OP_ADD_REF: case ZVFS_OP_ADD_REF_BATCH: + case ZVFS_OP_RESET_BLOBSTORE: if (header.payload_len != 0) { return 0; } diff --git a/src/proto/ipc_proto.h b/src/proto/ipc_proto.h index e76659f..dc509b3 100644 --- a/src/proto/ipc_proto.h +++ b/src/proto/ipc_proto.h @@ -21,7 +21,8 @@ enum zvfs_opcode { ZVFS_OP_CLOSE, ZVFS_OP_DELETE, ZVFS_OP_ADD_REF, - ZVFS_OP_ADD_REF_BATCH + ZVFS_OP_ADD_REF_BATCH, + ZVFS_OP_RESET_BLOBSTORE }; inline const char* cast_opcode2string(uint32_t op){ @@ -51,6 +52,15 @@ inline const char* cast_opcode2string(uint32_t op){ case ZVFS_OP_DELETE: return "DELETE"; break; + case ZVFS_OP_ADD_REF: + return "ADD_REF"; + break; + case ZVFS_OP_ADD_REF_BATCH: + return "ADD_REF_BATCH"; + break; + case ZVFS_OP_RESET_BLOBSTORE: + return "RESET_BLOBSTORE"; + break; default: break; } diff --git a/tests/daemon_test/ipc_zvfs_test.c b/tests/daemon_test/ipc_zvfs_test.c index 61b71e9..d6fe6ee 100644 --- a/tests/daemon_test/ipc_zvfs_test.c +++ b/tests/daemon_test/ipc_zvfs_test.c @@ -226,6 +226,29 @@ void do_resize(int fd, uint64_t handle_id, uint64_t new_size) { if(resp.data) free(resp.data); } +void do_reset(int fd) { + struct zvfs_req req; + memset(&req, 0, sizeof(req)); + req.opcode = ZVFS_OP_RESET_BLOBSTORE; + + uint8_t buf[BUF_SIZE]; + size_t n = zvfs_serialize_req(&req, buf, sizeof(buf)); + if (n == 0) { fprintf(stderr, "serialize failed\n"); return; } + if (write(fd, buf, n) != n) { perror("write"); return; } + + uint8_t resp_buf[BUF_SIZE]; + ssize_t r = read(fd, resp_buf, sizeof(resp_buf)); + if (r <= 0) { perror("read"); return; } + + struct zvfs_resp resp; + memset(&resp, 0, sizeof(resp)); + size_t consumed = zvfs_deserialize_resp(resp_buf, r, &resp); + if (consumed == 0) { fprintf(stderr, "deserialize failed\n"); return; } + + printf("Received RESET_BLOBSTORE response: status=%d\n", resp.status); + if (resp.data) free(resp.data); +} + // -------------------- main -------------------- int main() { @@ -233,7 +256,7 @@ int main() { if(fd < 0) return 1; printf("Connected to server at %s\n", SOCKET_PATH); - printf("Commands:\n create\n open \n read \n write \n writeg \n close \n delete \n resize \n quit\n"); + printf("Commands:\n create\n open \n read \n write \n writeg \n close \n delete \n resize \n reset\n quit\n"); char line[256]; while (1) { @@ -257,6 +280,7 @@ int main() { else if (strcmp(cmd,"close")==0 && sscanf(line,"%*s %lu",&a)==1) do_close(fd,a); else if (strcmp(cmd,"delete")==0 && sscanf(line,"%*s %lu",&a)==1) do_delete(fd,a); else if (strcmp(cmd,"resize")==0 && sscanf(line,"%*s %lu %lu",&a,&b)==2) do_resize(fd,a,b); + else if (strcmp(cmd,"reset")==0) do_reset(fd); else printf("Unknown or invalid command\n"); } diff --git a/trace.log b/trace.log new file mode 100644 index 0000000..7e5717d --- /dev/null +++ b/trace.log @@ -0,0 +1,442 @@ +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/haswell/avx512_1/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/haswell/avx512_1/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/haswell/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/haswell/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/avx512_1/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/avx512_1/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/tls/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/haswell/avx512_1/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/haswell/avx512_1/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/haswell/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/haswell/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/avx512_1/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/avx512_1/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/x86_64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/lib/sudo/libaudit.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libaudit.so.1", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3407\0\0\0\0\0\0@\0\0\0\0\0\0\0P\1\2\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230)\0\0\0\0\0\0\230)\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\265u\0\0\0\0\0\0\265u\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\260\0\0\0\0\0\0\0\260\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/usr/lib/sudo/libselinux.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@p\0\0\0\0\0\0@\0\0\0\0\0\0\0\300u\2\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220\\\0\0\0\0\0\0\220\\\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0`\0\0\0\0\0\0\0`\0\0\0\0\0\0\0`\0\0\0\0\0\0\r\205\1\0\0\0\0\0\r\205\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\360\1\0\0\0\0\0\0\360\1\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/usr/lib/sudo/libutil.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libutil.so.1", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\23\0\0\0\0\0\0@\0\0\0\0\0\0\0`2\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\r\0\0\0\0\0\0`\r\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\235\r\0\0\0\0\0\0\235\r\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/usr/lib/sudo/libsudo_util.so.0", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@[\0\0\0\0\0\0@\0\0\0\0\0\0\0`\224\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0C\0\0\0\0\0\0\0C\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0\35\350\0\0\0\0\0\0\35\350\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\1\0\0\0\0\0\0@\1\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/usr/lib/sudo/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0@\0\0\0\0\0\0\0\30\347\36\0\0\0\0\0\0\0\0\0@\08\0\16\0@\0D\0C\0\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\20\3\0\0\0\0\0\0\20\3\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0\240\346\33\0\0\0\0\0\240\346\33\0\0\0\0\0\240\346\33\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcap-ng.so.0", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220$\0\0\0\0\0\0@\0\0\0\0\0\0\0xb\0\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\21\0\0\0\0\0\0\370\21\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\341\"\0\0\0\0\0\0\341\"\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\"\0\0\0\0\0\0@\0\0\0\0\0\0\0\210\363\10\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\36\0\0\0\0\0\0\300\36\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0]C\6\0\0\0\0\0]C\6\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\6\0\0\0\0\0\0p\6\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \22\0\0\0\0\0\0@\0\0\0\0\0\0\0\340A\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\16\0\0\0\0\0\0H\16\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\211\21\0\0\0\0\0\0\211\21\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220q\0\0\0\0\0\0@\0\0\0\0\0\0\0h\\\2\0\0\0\0\0\0\0\0\0@\08\0\r\0@\0'\0&\0\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\330\2\0\0\0\0\0\0\330\2\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0\20\202\1\0\0\0\0\0\20\202\1\0\0\0\0\0\20\202\1\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/proc/filesystems", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "nodev\tsysfs\nnodev\ttmpfs\nnodev\tbdev\nnodev\tproc\nnodev\tcgroup\nnodev\tcgroup2\nnodev\tcpuset\nnodev\tdevtmpfs\nnodev\tconfigfs\nnodev\tdebugfs\nnodev\ttracefs\nnodev\tsecurityfs\nnodev\tsockfs\nnodev\tbpf\nnodev\tpipefs\nnod"..., 1024) = 385 +209063 read(3, "", 1024) = 0 +209063 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 +209063 openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0UTC\0\0\0TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0UTC\0\0\0\nUTC0\n", 4096) = 118 +209063 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0UTC\0\0\0\nUTC0\n", 4096) = 62 +209063 openat(AT_FDCWD, "/dev/tty", O_RDWR) = 3 +209063 openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "# /etc/nsswitch.conf\n#\n# Example configuration of GNU Name Service Switch functionality.\n# If you have the `glibc-doc-reference' and `info' packages installed, try:\n# `info libc \"Name Service Switch\"'"..., 4096) = 510 +209063 read(3, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3005\0\0\0\0\0\0@\0\0\0\0\0\0\0\320\302\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h!\0\0\0\0\0\0h!\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0)j\0\0\0\0\0\0)j\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/proc/sys/kernel/ngroups_max", O_RDONLY) = 3 +209063 read(3, "65536\n", 31) = 6 +209063 openat(AT_FDCWD, "/proc/self/stat", O_RDONLY|O_NOFOLLOW) = 3 +209063 read(3, "209063 (sudo) R 209060 209060 60859 34818 209060 4194560 155 0 0 0 0 3 0 0 20 0 1 0 9760309 7122944 732 18446744073709551615 94338473955328 94338474081237 140726831231536 0 0 0 0 4096 616967 0 0 0 17 "..., 1024) = 323 +209063 read(3, "", 701) = 0 +209063 openat(AT_FDCWD, "/usr/lib/sudo/sudoers.so", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\212\0\0\0\0\0\0@\0\0\0\0\0\0\0\20\370\5\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Pj\0\0\0\0\0\0Pj\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0u\231\3\0\0\0\0\0u\231\3\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\20\4\0\0\0\0\0\0\20\4\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/usr/lib/sudo/libpam.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpam.so.0", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3407\0\0\0\0\0\0@\0\0\0\0\0\0\0`\3\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30#\0\0\0\0\0\0\30#\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\t\203\0\0\0\0\0\0\t\203\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\300\0\0\0\0\0\0\0\300\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "# Locale name alias data base.\n# Copyright (C) 1996-2020 Free Software Foundation, Inc.\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General"..., 4096) = 2996 +209063 read(3, "", 4096) = 0 +209063 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/sudoers.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 +209063 read(3, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY) = 3 +209063 read(3, "# /etc/nsswitch.conf\n#\n# Example configuration of GNU Name Service Switch functionality.\n# If you have the `glibc-doc-reference' and `info' packages installed, try:\n# `info libc \"Name Service Switch\"'"..., 4096) = 510 +209063 read(3, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/sudoers", O_RDONLY) = 3 +209063 read(3, "#\n# This file MUST be edited with the 'visudo' command as root.\n#\n# Please consider adding local content in /etc/sudoers.d/ instead of\n# directly modifying this file.\n#\n# See the man page for details "..., 4096) = 755 +209063 read(3, "#\n# This file MUST be edited with the 'visudo' command as root.\n#\n# Please consider adding local content in /etc/sudoers.d/ instead of\n# directly modifying this file.\n#\n# See the man page for details "..., 8192) = 755 +209063 read(3, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/sudoers.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4 +209063 openat(AT_FDCWD, "/etc/sudoers.d/README", O_RDONLY) = 4 +209063 read(4, "#\n# As of Debian version 1.7.2p1-1, the default /etc/sudoers file created on\n# installation of the package now includes the directive:\n# \n# \t#includedir /etc/sudoers.d\n# \n# This will cause sudo to rea"..., 4096) = 958 +209063 read(4, "#\n# As of Debian version 1.7.2p1-1, the default /etc/sudoers file created on\n# installation of the package now includes the directive:\n# \n# \t#includedir /etc/sudoers.d\n# \n# This will cause sudo to rea"..., 8192) = 958 +209063 read(4, "", 4096) = 0 +209063 read(4, "", 8192) = 0 +209063 read(3, "", 8192) = 0 +209063 openat(AT_FDCWD, "/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "# The \"order\" line is only used by old versions of the C library.\norder hosts,bind\nmulti on\n", 4096) = 92 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "# This file is managed by man:systemd-resolved(8). Do not edit.\n#\n# This is a dynamic resolv.conf file for connecting local clients to the\n# internal DNS stub resolver of systemd-resolved. This file l"..., 4096) = 736 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/hosts", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "127.0.0.1 localhost\n127.0.1.1 ubuntu20\n\n# The following lines are desirable for IPv6 capable hosts\n::1 ip6-localhost ip6-loopback\nfe00::0 ip6-localnet\nff00::0 ip6-mcastprefix\nff02::1 ip6-allnodes\n"..., 4096) = 223 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/proc/sys/kernel/ngroups_max", O_RDONLY) = 4 +209063 read(4, "65536\n", 31) = 6 +209063 openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:\ndaemon:x:1:\nbin:x:2:\nsys:x:3:\nadm:x:4:syslog,lian\ntty:x:5:syslog\ndisk:x:6:\nlp:x:7:\nmail:x:8:\nnews:x:9:\nuucp:x:10:\nman:x:12:\nproxy:x:13:\nkmem:x:15:\ndialout:x:20:\nfax:x:21:\nvoice:x:22:\ncdrom:x"..., 4096) = 872 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_systemd.so.2", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240o\0\0\0\0\0\0@\0\0\0\0\0\0\0\330\241\3\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300P\0\0\0\0\0\0\300P\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0`\0\0\0\0\0\0\0`\0\0\0\0\0\0\0`\0\0\0\0\0\0\rS\2\0\0\0\0\0\rS\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\300\2\0\0\0\0\0\0\300\2\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/run/systemd/userdb/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4 +209063 openat(AT_FDCWD, "/proc/sys/kernel/random/boot_id", O_RDONLY|O_NOCTTY|O_CLOEXEC) = 4 +209063 read(4, "3c8435b7-9d90-4b6d-8a23-62ec1a5279ee\n", 38) = 37 +209063 read(4, "", 1) = 0 +209063 openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:\ndaemon:x:1:\nbin:x:2:\nsys:x:3:\nadm:x:4:syslog,lian\ntty:x:5:syslog\ndisk:x:6:\nlp:x:7:\nmail:x:8:\nnews:x:9:\nuucp:x:10:\nman:x:12:\nproxy:x:13:\nkmem:x:15:\ndialout:x:20:\nfax:x:21:\nvoice:x:22:\ncdrom:x"..., 4096) = 872 +209063 openat(AT_FDCWD, "/etc/pam.d/sudo", O_RDONLY) = 4 +209063 read(4, "#%PAM-1.0\n\nsession required pam_env.so readenv=1 user_readenv=0\nsession required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0\n@include common-auth\n@include common-account\n"..., 4096) = 239 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_env.so", O_RDONLY|O_CLOEXEC) = 5 +209063 read(5, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\23\0\0\0\0\0\0@\0\0\0\0\0\0\0 B\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320\f\0\0\0\0\0\0\320\f\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\305\31\0\0\0\0\0\0\305\31\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/etc/pam.d/common-auth", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-auth - authentication settings common to all services\n#\n# This file is included from other service-specific PAM config files,\n# and should contain a list of the authentication mo"..., 4096) = 1242 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_unix.so", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220=\0\0\0\0\0\0@\0\0\0\0\0\0\0\270\364\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200#\0\0\0\0\0\0\200#\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\351\207\0\0\0\0\0\0\351\207\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\300\0\0\0\0\0\0\0\300\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 6 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@ \0\0\0\0\0\0@\0\0\0\0\0\0\0H\21\3\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\33\0\32\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0x\24\0\0\0\0\0\0x\24\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\215L\1\0\0\0\0\0\215L\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\1\0\0\0\0\0\0p\1\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnsl.so.1", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 M\0\0\0\0\0\0@\0\0\0\0\0\0\0\230\224\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\350:\0\0\0\0\0\0\350:\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0!\367\0\0\0\0\0\0!\367\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\1\0\0\0\0\0\0@\1\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_deny.so", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\20\0\0\0\0\0\0@\0\0\0\0\0\0\0 1\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\27\0\26\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\5\0\0\0\0\0\0\300\5\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0i\1\0\0\0\0\0\0i\1\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_permit.so", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\20\0\0\0\0\0\0@\0\0\0\0\0\0\0p1\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \7\0\0\0\0\0\0 \7\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0E\2\0\0\0\0\0\0E\2\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_cap.so", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\0\0\0\0\0\0@\0\0\0\0\0\0\08A\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\33\0\32\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\f\0\0\0\0\0\0\340\f\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\225\20\0\0\0\0\0\0\225\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 6 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcap.so.2", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300#\0\0\0\0\0\0@\0\0\0\0\0\0\0\220r\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\33\0\0\0\0\0\0\20\33\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\271'\0\0\0\0\0\0\271'\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0"..., 832) = 832 +209063 read(5, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/pam.d/common-account", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-account - authorization settings common to all services\n#\n# This file is included from other service-specific PAM config files,\n# and should contain a list of the authorization m"..., 4096) = 1208 +209063 read(5, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/pam.d/common-session-noninteractive", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-session-noninteractive - session-related modules\n# common to all non-interactive services\n#\n# This file is included from other service-specific PAM config files,\n# and should con"..., 4096) = 1435 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_umask.so", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\23\0\0\0\0\0\0@\0\0\0\0\0\0\0 2\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320\v\0\0\0\0\0\0\320\v\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\325\n\0\0\0\0\0\0\325\n\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +209063 read(5, "", 4096) = 0 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/pam.d/other", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/pam.d/other - specify the PAM fallback behaviour\n#\n# Note that this file is used for any unspecified service; for example\n#if /etc/pam.d/cron specifies no session modules but cron calls\n#pam"..., 4096) = 520 +209063 openat(AT_FDCWD, "/etc/pam.d/common-auth", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-auth - authentication settings common to all services\n#\n# This file is included from other service-specific PAM config files,\n# and should contain a list of the authentication mo"..., 4096) = 1242 +209063 read(5, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/pam.d/common-account", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-account - authorization settings common to all services\n#\n# This file is included from other service-specific PAM config files,\n# and should contain a list of the authorization m"..., 4096) = 1208 +209063 read(5, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/pam.d/common-password", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-password - password-related modules common to all services\n#\n# This file is included from other service-specific PAM config files,\n# and should contain a list of modules that def"..., 4096) = 1440 +209063 read(5, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/pam.d/common-session", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/pam.d/common-session - session-related modules common to all services\n#\n# This file is included from other service-specific PAM config files,\n# and should contain a list of modules that defin"..., 4096) = 1470 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_systemd.so", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\270\0\0\0\0\0\0@\0\0\0\0\0\0\0h;\7\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\210\222\0\0\0\0\0\0\210\222\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0\35\260\4\0\0\0\0\0\35\260\4\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0`\5\0\0\0\0\0\0`\5\0\0\0\0\0"..., 832) = 832 +209063 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 6 +209063 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpam_misc.so.0", O_RDONLY|O_CLOEXEC) = 6 +209063 read(6, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\23\0\0\0\0\0\0@\0\0\0\0\0\0\0H2\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\17\0\0\0\0\0\0p\17\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\335\17\0\0\0\0\0\0\335\17\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0"..., 832) = 832 +209063 read(5, "", 4096) = 0 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(4, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 read(4, "algorithm compatible with the one used by recent releases of FreeBSD.\n# It supports passwords of unlimited length and longer salt strings.\n# Set to \"no\" if you need to copy encrypted passwords to othe"..., 4096) = 2358 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/shadow", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:$6$bdh.r5jHQD.TAF6u$UJD.wAQmcGcOrOUoLFlKbk4qDzG7jPJJGVioKIJbIfqp1qQOXOAMb8Ucql6Xc7IvEPRzQT/ayJs.Wvqhb3u1p/:20514:0:99999:7:::\ndaemon:*:18863:0:99999:7:::\nbin:*:18863:0:99999:7:::\nsys:*:18863:0:99"..., 4096) = 1240 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(4, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 read(4, "algorithm compatible with the one used by recent releases of FreeBSD.\n# It supports passwords of unlimited length and longer salt strings.\n# Set to \"no\" if you need to copy encrypted passwords to othe"..., 4096) = 2358 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:\ndaemon:x:1:\nbin:x:2:\nsys:x:3:\nadm:x:4:syslog,lian\ntty:x:5:syslog\ndisk:x:6:\nlp:x:7:\nmail:x:8:\nnews:x:9:\nuucp:x:10:\nman:x:12:\nproxy:x:13:\nkmem:x:15:\ndialout:x:20:\nfax:x:21:\nvoice:x:22:\ncdrom:x"..., 4096) = 872 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/run/systemd/userdb/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4 +209063 openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:\ndaemon:x:1:\nbin:x:2:\nsys:x:3:\nadm:x:4:syslog,lian\ntty:x:5:syslog\ndisk:x:6:\nlp:x:7:\nmail:x:8:\nnews:x:9:\nuucp:x:10:\nman:x:12:\nproxy:x:13:\nkmem:x:15:\ndialout:x:20:\nfax:x:21:\nvoice:x:22:\ncdrom:x"..., 4096) = 872 +209063 openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:\ndaemon:x:1:\nbin:x:2:\nsys:x:3:\nadm:x:4:syslog,lian\ntty:x:5:syslog\ndisk:x:6:\nlp:x:7:\nmail:x:8:\nnews:x:9:\nuucp:x:10:\nman:x:12:\nproxy:x:13:\nkmem:x:15:\ndialout:x:20:\nfax:x:21:\nvoice:x:22:\ncdrom:x"..., 4096) = 872 +209063 openat(AT_FDCWD, "/etc/security/capability.conf", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/security/capability.conf\n#\n# this is a sample capability file (to be used in conjunction with\n# the pam_cap.so module)\n#\n# In order to use this module, it must have been linked with libcap\n# "..., 4096) = 1793 +209063 openat(AT_FDCWD, "/etc/security/pam_env.conf", O_RDONLY) = 4 +209063 read(4, "#\n# This is the configuration file for pam_env, a PAM module to load in\n# a configurable list of environment variables for a\n#\n# The original idea for this came from Andrew G. Morgan ...\n#\n# "..., 4096) = 2972 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/environment", O_RDONLY) = 4 +209063 read(4, "PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin\"\n", 4096) = 106 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/security/pam_env.conf", O_RDONLY) = 4 +209063 read(4, "#\n# This is the configuration file for pam_env, a PAM module to load in\n# a configurable list of environment variables for a\n#\n# The original idea for this came from Andrew G. Morgan ...\n#\n# "..., 4096) = 2972 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/default/locale", O_RDONLY) = 4 +209063 read(4, "LANG=en_US.UTF-8\n", 4096) = 17 +209063 read(4, "", 4096) = 0 +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(4, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(4, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209063 openat(AT_FDCWD, "/etc/group", O_RDONLY|O_CLOEXEC) = 4 +209063 read(4, "root:x:0:\ndaemon:x:1:\nbin:x:2:\nsys:x:3:\nadm:x:4:syslog,lian\ntty:x:5:syslog\ndisk:x:6:\nlp:x:7:\nmail:x:8:\nnews:x:9:\nuucp:x:10:\nman:x:12:\nproxy:x:13:\nkmem:x:15:\ndialout:x:20:\nfax:x:21:\nvoice:x:22:\ncdrom:x"..., 4096) = 872 +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 4 +209063 read(4, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(4, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 read(4, "algorithm compatible with the one used by recent releases of FreeBSD.\n# It supports passwords of unlimited length and longer salt strings.\n# Set to \"no\" if you need to copy encrypted passwords to othe"..., 4096) = 2358 +209063 openat(AT_FDCWD, "/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4 +209064 openat(AT_FDCWD, "/proc/self/fd", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3 +209063 read(5, "", 4) = 0 +209064 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0@\0\0\0\0\0\0\0\30\347\36\0\0\0\0\0\0\0\0\0@\08\0\16\0@\0D\0C\0\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\20\3\0\0\0\0\0\0\20\3\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0\240\346\33\0\0\0\0\0\240\346\33\0\0\0\0\0\240\346\33\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/src/libzvfs.so", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 `\0\0\0\0\0\0@\0\0\0\0\0\0\0x\250\7\1\0\0\0\0\0\0\0\0@\08\0\f\0@\0&\0%\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320N\0\0\0\0\0\0\320N\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0\355\275\0\0\0\0\0\0\355\275\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\20\1\0\0\0\0\0\0\20\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpq.so.5", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\272\0\0\0\0\0\0@\0\0\0\0\0\0\0\210\361\4\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\08\226\0\0\0\0\0\08\226\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0\t1\2\0\0\0\0\0\t1\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\340\2\0\0\0\0\0\0\340\2\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220q\0\0\0\0\0\0@\0\0\0\0\0\0\0h\\\2\0\0\0\0\0\0\0\0\0@\08\0\r\0@\0'\0&\0\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\330\2\0\0\0\0\0\0\330\2\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0\20\202\1\0\0\0\0\0\20\202\1\0\0\0\0\0\20\202\1\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libedit.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\217\0\0\0\0\0\0@\0\0\0\0\0\0\0\330%\3\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\310u\0\0\0\0\0\0\310u\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0001\257\1\0\0\0\0\0001\257\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\2\0\0\0\0\0\0000\2\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\323\0\0\0\0\0\0@\0\0\0\0\0\0\0\350\334\24\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0!\0 \0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\303\0\0\0\0\0\0\10\303\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\320\0\0\0\0\0\0\0\320\0\0\0\0\0\0\0\320\0\0\0\0\0\0\265o\n\0\0\0\0\0\265o\n\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\v\0\0\0\0\0\0@\v\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300A\2\0\0\0\0\0@\0\0\0\0\0\0\0\30\347\36\0\0\0\0\0\0\0\0\0@\08\0\16\0@\0D\0C\0\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0\20\3\0\0\0\0\0\0\20\3\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0\240\346\33\0\0\0\0\0\240\346\33\0\0\0\0\0\240\346\33\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/haswell/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/haswell/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/haswell/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/haswell/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/tls/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/haswell/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/haswell/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/haswell/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/haswell/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/build/lib/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/haswell/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/haswell/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/haswell/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/haswell/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/tls/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/haswell/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/haswell/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/haswell/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/haswell/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/avx512_1/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/avx512_1/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/x86_64/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/home/lian/try/zvfs/spdk/dpdk/build/lib/libdl.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \22\0\0\0\0\0\0@\0\0\0\0\0\0\0\340A\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\16\0\0\0\0\0\0H\16\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\211\21\0\0\0\0\0\0\211\21\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libssl.so.1.1", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\367\1\0\0\0\0\0@\0\0\0\0\0\0\0\330\30\t\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \275\1\0\0\0\0\0 \275\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\300\1\0\0\0\0\0\0\300\1\0\0\0\0\0\0\300\1\0\0\0\0\0I\354\4\0\0\0\0\0I\354\4\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\260\6\0\0\0\0\0\0\260\6\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\220\7\0\0\0\0\0@\0\0\0\0\0\0\0\240\34-\0\0\0\0\0\0\0\0\0@\08\0\t\0@\0\33\0\32\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`y\7\0\0\0\0\0`y\7\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\200\7\0\0\0\0\0\0\200\7\0\0\0\0\0\0\200\7\0\0\0\0\0\35\272\31\0\0\0\0\0\35\272\31\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@!\0\0\0\0\0\0@!\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgssapi_krb5.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\321\0\0\0\0\0\0@\0\0\0\0\0\0\0P\262\4\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\247\0\0\0\0\0\0\360\247\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\260\0\0\0\0\0\0\0\260\0\0\0\0\0\0\0\260\0\0\0\0\0\0\r\37\3\0\0\0\0\0\r\37\3\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\320\3\0\0\0\0\0\0\320\3\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libldap_r-2.4.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\356\0\0\0\0\0\0@\0\0\0\0\0\0\0\320&\5\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\302\0\0\0\0\0\0\360\302\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\320\0\0\0\0\0\0\0\320\0\0\0\0\0\0\0\320\0\0\0\0\0\0\215=\3\0\0\0\0\0\215=\3\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\20\4\0\0\0\0\0\0\20\4\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libtinfo.so.6", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \347\0\0\0\0\0\0@\0\0\0\0\0\0\0\240\346\2\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\325\0\0\0\0\0\0\20\325\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\340\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\340\0\0\0\0\0\0\371\342\0\0\0\0\0\0\371\342\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\320\1\0\0\0\0\0\0\320\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libbsd.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@N\0\0\0\0\0\0@\0\0\0\0\0\0\0Xr\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2006\0\0\0\0\0\0\2006\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0y\356\0\0\0\0\0\0y\356\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\1\0\0\0\0\0\0000\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libkrb5.so.3", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@?\2\0\0\0\0\0@\0\0\0\0\0\0\0\0\274\r\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\210\24\2\0\0\0\0\0\210\24\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \2\0\0\0\0\0\0 \2\0\0\0\0\0\0 \2\0\0\0\0\0Y\4\6\0\0\0\0\0Y\4\6\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\10\0\0\0\0\0\0000\10\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libk5crypto.so.3", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240D\0\0\0\0\0\0@\0\0\0\0\0\0\0\300\342\2\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0000:\0\0\0\0\0\0000:\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0m\262\1\0\0\0\0\0m\262\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\0\2\0\0\0\0\0\0\0\2\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcom_err.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200$\0\0\0\0\0\0@\0\0\0\0\0\0\0HQ\0\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\22\0\0\0\0\0\0@\22\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\331\20\0\0\0\0\0\0\331\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libkrb5support.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3605\0\0\0\0\0\0@\0\0\0\0\0\0\0\240\323\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200)\0\0\0\0\0\0\200)\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\201a\0\0\0\0\0\0\201a\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/liblber-2.4.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3003\0\0\0\0\0\0@\0\0\0\0\0\0\0\220\362\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200)\0\0\0\0\0\0\200)\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\271u\0\0\0\0\0\0\271u\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\260\0\0\0\0\0\0\0\260\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 G\0\0\0\0\0\0@\0\0\0\0\0\0\0\350\203\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0 \0\37\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3105\0\0\0\0\0\0\3105\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0)\361\0\0\0\0\0\0)\361\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\1\0\0\0\0\0\0@\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libsasl2.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2008\0\0\0\0\0\0@\0\0\0\0\0\0\0P\264\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\210'\0\0\0\0\0\0\210'\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0%\26\1\0\0\0\0\0%\26\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0P\1\0\0\0\0\0\0P\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgssapi.so.3", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \367\0\0\0\0\0\0@\0\0\0\0\0\0\0P7\4\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220\310\0\0\0\0\0\0\220\310\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\320\0\0\0\0\0\0\0\320\0\0\0\0\0\0\0\320\0\0\0\0\0\0001\203\2\0\0\0\0\0001\203\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0`\3\0\0\0\0\0\0`\3\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgnutls.so.30", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\4\3\0\0\0\0\0@\0\0\0\0\0\0\0\340.\35\0\0\0\0\0\0\0\0\0@\08\0\n\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\353\2\0\0\0\0\0\200\353\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\360\2\0\0\0\0\0\0\360\2\0\0\0\0\0\0\360\2\0\0\0\0\09\30\22\0\0\0\0\09\30\22\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\20\25\0\0\0\0\0\0\20\25\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libkeyutils.so.1", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\"\0\0\0\0\0\0@\0\0\0\0\0\0\0HQ\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\260\24\0\0\0\0\0\0\260\24\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\t\22\0\0\0\0\0\0\t\22\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libheimntlm.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`6\0\0\0\0\0\0@\0\0\0\0\0\0\0\200\243\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370'\0\0\0\0\0\0\370'\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\3558\0\0\0\0\0\0\3558\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libkrb5.so.26", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\363\1\0\0\0\0\0@\0\0\0\0\0\0\0x\t\t\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\255\1\0\0\0\0\0@\255\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\260\1\0\0\0\0\0\0\260\1\0\0\0\0\0\0\260\1\0\0\0\0\0\31\6\5\0\0\0\0\0\31\6\5\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\300\6\0\0\0\0\0\0\300\6\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libasn1.so.8", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\243\1\0\0\0\0\0@\0\0\0\0\0\0\0 B\n\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \232\1\0\0\0\0\0 \232\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\240\1\0\0\0\0\0\0\240\1\0\0\0\0\0\0\240\1\0\0\0\0\0]\237\6\0\0\0\0\0]\237\6\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0@\10\0\0\0\0\0\0@\10\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libhcrypto.so.4", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 z\0\0\0\0\0\0@\0\0\0\0\0\0\08[\3\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0xo\0\0\0\0\0\0xo\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0E\357\1\0\0\0\0\0E\357\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0`\2\0\0\0\0\0\0`\2\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libroken.so.18", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200`\0\0\0\0\0\0@\0\0\0\0\0\0\0\0t\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\210G\0\0\0\0\0\0\210G\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0\0P\0\0\0\0\0\0\261\315\0\0\0\0\0\0\261\315\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0 \1\0\0\0\0\0\0 \1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libp11-kit.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\273\2\0\0\0\0\0@\0\0\0\0\0\0\0XH\23\0\0\0\0\0\0\0\0\0@\08\0\f\0@\0\36\0\35\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\251\2\0\0\0\0\0@\251\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\260\2\0\0\0\0\0\0\260\2\0\0\0\0\0\0\260\2\0\0\0\0\0\275\221\t\0\0\0\0\0\275\221\t\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0P\f\0\0\0\0\0\0P\f\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libidn2.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240$\0\0\0\0\0\0@\0\0\0\0\0\0\0H\361\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\24\0\0\0\0\0\0`\24\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\301A\0\0\0\0\0\0\301A\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libunistring.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\10\1\0\0\0\0\0@\0\0\0\0\0\0\0\310\1\30\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h\364\0\0\0\0\0\0h\364\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\0\0]T\3\0\0\0\0\0]T\3\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0`\4\0\0\0\0\0\0`\4\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libtasn1.so.6", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2404\0\0\0\0\0\0@\0\0\0\0\0\0\0XA\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\250)\0\0\0\0\0\0\250)\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\341\272\0\0\0\0\0\0\341\272\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\360\0\0\0\0\0\0\0\360\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnettle.so.7", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\220\0\0\0\0\0\0@\0\0\0\0\0\0\0\250\201\3\0\0\0\0\0\0\0\0\0@\08\0\t\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\240\203\0\0\0\0\0\0\240\203\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\220\0\0\0\0\0\0\0\220\0\0\0\0\0\0\0\220\0\0\0\0\0\0\355\327\1\0\0\0\0\0\355\327\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\2\0\0\0\0\0\0p\2\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libhogweed.so.5", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 v\0\0\0\0\0\0@\0\0\0\0\0\0\0HT\3\0\0\0\0\0\0\0\0\0@\08\0\t\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@j\0\0\0\0\0\0@j\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0\0p\0\0\0\0\0\0\355\377\0\0\0\0\0\0\355\377\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\1\0\0\0\0\0\0p\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgmp.so.10", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\242\0\0\0\0\0\0@\0\0\0\0\0\0\0\240\"\10\0\0\0\0\0\0\0\0\0@\08\0\t\0@\0\33\0\32\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\250\220\0\0\0\0\0\0\250\220\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0\261\376\5\0\0\0\0\0\261\376\5\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\240\6\0\0\0\0\0\0\240\6\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libwind.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\21\0\0\0\0\0\0@\0\0\0\0\0\0\0X\201\2\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\16\0\0\0\0\0\0H\16\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\20\0\0\0\0\0\09\33\0\0\0\0\0\09\33\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libheimbase.so.1", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3605\0\0\0\0\0\0@\0\0\0\0\0\0\0P\5\1\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\320&\0\0\0\0\0\0\320&\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\31\203\0\0\0\0\0\0\31\203\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\300\0\0\0\0\0\0\0\300\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libhx509.so.5", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340/\1\0\0\0\0\0@\0\0\0\0\0\0\0\270\300\4\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\35\0\34\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h\371\0\0\0\0\0\0h\371\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\0\0\275\211\2\0\0\0\0\0\275\211\2\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\220\3\0\0\0\0\0\0\220\3\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libsqlite3.so.0", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\346\0\0\0\0\0\0@\0\0\0\0\0\0\08x\22\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\270\335\0\0\0\0\0\0\270\335\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\340\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\340\0\0\0\0\0\0\1\372\r\0\0\0\0\0\1\372\r\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\340\16\0\0\0\0\0\0\340\16\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcrypt.so.1", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@ \0\0\0\0\0\0@\0\0\0\0\0\0\0H\21\3\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\33\0\32\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0x\24\0\0\0\0\0\0x\24\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\215L\1\0\0\0\0\0\215L\1\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0p\1\0\0\0\0\0\0p\1\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libffi.so.7", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\"\0\0\0\0\0\0@\0\0\0\0\0\0\0\230\242\0\0\0\0\0\0\0\0\0\0@\08\0\t\0@\0\34\0\33\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0000\27\0\0\0\0\0\0000\27\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0\0 \0\0\0\0\0\0UZ\0\0\0\0\0\0UZ\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 +209064 openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "# /etc/nsswitch.conf\n#\n# Example configuration of GNU Name Service Switch functionality.\n# If you have the `glibc-doc-reference' and `info' packages installed, try:\n# `info libc \"Name Service Switch\"'"..., 4096) = 510 +209064 read(3, "", 4096) = 0 +209064 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 +209064 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3005\0\0\0\0\0\0@\0\0\0\0\0\0\0\320\302\0\0\0\0\0\0\0\0\0\0@\08\0\v\0@\0\37\0\36\0\1\0\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0h!\0\0\0\0\0\0h!\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0\0000\0\0\0\0\0\0)j\0\0\0\0\0\0)j\0\0\0\0\0\0\0\20\0\0\0\0\0\0\1\0\0\0\4\0\0\0\0\240\0\0\0\0\0\0\0\240\0\0\0\0\0\0"..., 832) = 832 +209064 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209064 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3 +209064 read(3, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209064 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209064 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209064 openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 4 +209064 read(4, "# Locale name alias data base.\n# Copyright (C) 1996-2020 Free Software Foundation, Inc.\n#\n# This program is free software; you can redistribute it and/or modify\n# it under the terms of the GNU General"..., 4096) = 2996 +209064 read(4, "", 4096) = 0 +209064 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/psql-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 4 +209064 openat(AT_FDCWD, "/lib/terminfo/x/xterm-256color", O_RDONLY) = 4 +209064 read(4, "\36\2%\0&\0\17\0\235\1\356\5xterm-256color|xterm with 256 colors\0\0\1\0\0\1\0\0\0\1\0\0\0\0\1\1\0\0\0\0\0\0\0\1\0\0\1\0\1\1\0\0\0\0\0\0\0\0\1\0P\0\0\0\10\0\0\0\30\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\1\0\0\0\0\1\0\0\0\4\0\6\0\10\0\31\0\36\0&\0*\0.\0\377\3779\0J\0L\0P\0W\0\377\377Y\0f\0\377\377j\0n\0x\0|\0\377\377\377\377\200\0"..., 32768) = 3503 +209064 read(4, "", 28672) = 0 +209064 openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 +209064 read(4, "root:x:0:0:root:/root:/bin/bash\ndaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin\nbin:x:2:2:bin:/bin:/usr/sbin/nologin\nsys:x:3:3:sys:/dev:/usr/sbin/nologin\nsync:x:4:65534:sync:/bin:/bin/sync\ngames:x:5:6"..., 4096) = 2004 +209064 openat(AT_FDCWD, "/var/lib/postgresql/.psql_history", O_RDONLY) = 4 +209064 read(4, "ALTER USER postgres PASSWORD 'root'\1;\nCREATE\\040TABLESPACE\\040zvfs_ts\\040LOCATION\\040'/zvfs/pg_ts_bench';\nq\\012exit\n\\134q\nSELECT\\040d.datname,\\040t.spcname\\040\\012FROM\\040pg_database\\040d\\012JOIN\\040p"..., 4096) = 4096 +209064 read(0, "\\", 1) = 1 +209064 read(0, "c", 1) = 1 +209064 read(0, " ", 1) = 1 +209064 read(0, "b", 1) = 1 +209064 read(0, "e", 1) = 1 +209064 read(0, "n", 1) = 1 +209064 read(0, "c", 1) = 1 +209064 read(0, "h", 1) = 1 +209064 read(0, "d", 1) = 1 +209064 read(0, "b", 1) = 1 +209064 read(0, "\n", 1) = 1 +209064 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/libpq5-12.mo", O_RDONLY) = -1 ENOENT (No such file or directory) +209064 read(0, 0x7ffe08667040, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set) +209064 --- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} --- +209063 --- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} --- +209063 read(6, "\2", 1) = 1 +209063 read(6, 0x7ffd84c92cf7, 1) = -1 EAGAIN (Resource temporarily unavailable) +209064 --- SIGINT {si_signo=SIGINT, si_code=SI_USER, si_pid=209064, si_uid=115} --- +209064 read(0, "q", 1) = 1 +209064 read(0, "u", 1) = 1 +209064 read(0, "i", 1) = 1 +209064 read(0, "t", 1) = 1 +209064 read(0, "\n", 1) = 1 +209064 openat(AT_FDCWD, "/var/lib/postgresql/.psql_history", O_RDWR) = 3 +209064 openat(AT_FDCWD, "/tmp/.history1f5eRC", O_RDWR|O_CREAT|O_EXCL, 0600) = 4 +209064 read(3, "ALTER USER postgres PASSWORD 'root'\1;\nCREATE\\040TABLESPACE\\040zvfs_ts\\040LOCATION\\040'/zvfs/pg_ts_bench';\nq\\012exit\n\\134q\nSELECT\\040d.datname,\\040t.spcname\\040\\012FROM\\040pg_database\\040d\\012JOIN\\040p"..., 4096) = 4096 +209064 read(3, "hdb\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\134!\\040clear\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\040SELECT\\040pg_backend_pid();\n\\134c\\040benchdb\n\\134c\\040benchdb\nDROP\\040TABLE"..., 4096) = 537 +209064 read(3, "", 4096) = 0 +209064 read(3, "hdb\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\134!\\040clear\n\\134c\\040benchdb\n\\134c\\040benchdb\n\\040SELECT\\040pg_backend_pid();\n\\134c\\040benchdb\n\\134c\\040benchdb\nDROP\\040TABLE"..., 4096) = 537 +209064 read(3, "", 4096) = 0 +209064 read(4, "ALTER USER postgres PASSWORD 'root'\1;\nCREATE\\040TABLESPACE\\040zvfs_ts\\040LOCATION\\040'/zvfs/pg_ts_bench';\nq\\012exit\n\\134q\nSELECT\\040d.datname,\\040t.spcname\\040\\012FROM\\040pg_database\\040d\\012JOIN\\040p"..., 4096) = 4096 +209064 openat(AT_FDCWD, "/var/lib/postgresql/.psql_history", O_WRONLY|O_CREAT, 0600) = 3 +209064 openat(AT_FDCWD, "/var/lib/postgresql/.psql_history", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3 +209064 +++ exited with 0 +++ +209063 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=209064, si_uid=115, si_status=0, si_utime=0, si_stime=1} --- +209063 read(6, "\21", 1) = 1 +209063 read(6, 0x7ffd84c92cf7, 1) = -1 EAGAIN (Resource temporarily unavailable) +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(5, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 read(5, "algorithm compatible with the one used by recent releases of FreeBSD.\n# It supports passwords of unlimited length and longer salt strings.\n# Set to \"no\" if you need to copy encrypted passwords to othe"..., 4096) = 2358 +209063 openat(AT_FDCWD, "/etc/login.defs", O_RDONLY) = 5 +209063 read(5, "#\n# /etc/login.defs - Configuration control definitions for the login package.\n#\n# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH.\n# If unspecified, some arbitrary (and possibly inco"..., 4096) = 4096 +209063 read(5, " issuing \n# the \"mesg y\" command.\n\nTTYGROUP\ttty\nTTYPERM\t\t0600\n\n#\n# Login configuration initializations:\n#\n#\tERASECHAR\tTerminal ERASE character ('\\010' = backspace).\n#\tKILLCHAR\tTerminal KILL character "..., 4096) = 4096 +209063 read(5, "algorithm compatible with the one used by recent releases of FreeBSD.\n# It supports passwords of unlimited length and longer salt strings.\n# Set to \"no\" if you need to copy encrypted passwords to othe"..., 4096) = 2358 +209063 +++ exited with 0 +++