pg /c database 通过。似乎是pg使用 open/write 写入了某个文件,通过 fopen/fscanf 绕过了hook路径导致的。出现了新的段错误。

This commit is contained in:
2026-03-13 10:49:31 +00:00
parent 544f532bf5
commit 4d350d5aea
28 changed files with 1686 additions and 128 deletions

BIN
kingfs Normal file

Binary file not shown.

View File

@@ -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
```

47
scripts/do_trace.md Normal file
View File

@@ -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</zvfs/pg_ts_bench/PG_12_201909212/16385/PG_VERSION>
20:read(4</zvfs/pg_ts_bench/PG_12_201909212/16385/PG_VERSION>, "\0\0\0", 4096) = 3
21:read(4</zvfs/pg_ts_bench/PG_12_201909212/16385/PG_VERSION>, "", 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)

View File

@@ -21,7 +21,7 @@ BENCHMARKS="fillrandom,readrandom"
# key数
# NUM=1000000
NUM=500
NUM=5000
# 线程数
THREADS=2

View File

@@ -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_PRELOAD1=启用0=关闭。
# USE_LD_PRELOAD_RUN=1
# 压测阶段是否启用 LD_PRELOAD1=启用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}"

View File

@@ -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

View File

@@ -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

View File

@@ -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
* ============================================================ */

View File

@@ -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__

View File

@@ -2,6 +2,7 @@
#include "spdk_engine.h"
#include "ipc_cq.h"
#include <spdk/log.h>
#include <errno.h>
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;
}

Binary file not shown.

View File

@@ -19,6 +19,97 @@
#include <pthread.h>
#include <stdio.h>
/* ------------------------------------------------------------------ */
/* 内部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 */
/* ------------------------------------------------------------------ */

View File

@@ -4,6 +4,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
/**
* 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);

View File

@@ -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();

View File

@@ -4,6 +4,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <stdarg.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdint.h>
@@ -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);

View File

@@ -14,12 +14,110 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <pthread.h>
#include <stdint.h>
#include <limits.h>
#include <unistd.h>
#include <bits/types/struct_FILE.h>
/* ------------------------------------------------------------------ */
/* 内部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;
}

View File

@@ -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__

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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 <blob>\n read <handle> <offset> <len>\n write <handle> <offset> <data>\n writeg <handle> <offset> <data>\n close <handle>\n delete <blob>\n resize <handle> <size>\n quit\n");
printf("Commands:\n create\n open <blob>\n read <handle> <offset> <len>\n write <handle> <offset> <data>\n writeg <handle> <offset> <data>\n close <handle>\n delete <blob>\n resize <handle> <size>\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");
}

442
trace.log Normal file
View File

@@ -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#<quote>\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#<quote>\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 +++