diff --git a/0001-fix-suspend-in-fifo-the-reason-is-SIGURG-recieved-in.patch b/0001-fix-suspend-in-fifo-the-reason-is-SIGURG-recieved-in.patch deleted file mode 100644 index fcb4ade1dc310f8a4d0a10c5d959b4c13905a6d7..0000000000000000000000000000000000000000 --- a/0001-fix-suspend-in-fifo-the-reason-is-SIGURG-recieved-in.patch +++ /dev/null @@ -1,308 +0,0 @@ -From b6663e01b364c878e08206a4ccb3ea02a63d7ed0 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Thu, 7 Dec 2023 16:58:09 +0800 -Subject: [PATCH 1/3] fix suspend in fifo, the reason is SIGURG recieved in - client thread when wait for ack - -Signed-off-by: liqiang ---- - qtfs/include/log.h | 9 ++++--- - qtfs/qtfs/fifo.c | 21 +++++++++++++---- - qtfs/qtfs/qtfs-mod.c | 12 +++++----- - qtfs/qtfs_common/conn.c | 43 +++++++++++++++++++++++++++------- - qtfs/qtfs_server/server_fifo.c | 21 +++++++++++------ - 5 files changed, 77 insertions(+), 29 deletions(-) - -diff --git a/qtfs/include/log.h b/qtfs/include/log.h -index 4df42b3..284464e 100644 ---- a/qtfs/include/log.h -+++ b/qtfs/include/log.h -@@ -27,8 +27,11 @@ enum level { - #ifndef __KERNEL__ - #include - #define true 1 -+#ifndef log_switch -+#define log_switch 1 -+#endif - #define log_info(info, ...) \ -- if (true) {\ -+ if (log_switch) {\ - time_t t; \ - struct tm p; \ - time(&t); \ -@@ -39,7 +42,7 @@ enum level { - } - - #define log_warn(info, ...) \ -- if (true) {\ -+ if (log_switch) {\ - time_t t; \ - struct tm p; \ - time(&t); \ -@@ -50,7 +53,7 @@ enum level { - } - - #define log_err(info, ...) \ -- if (true) {\ -+ if (log_switch) {\ - time_t t; \ - struct tm p; \ - time(&t); \ -diff --git a/qtfs/qtfs/fifo.c b/qtfs/qtfs/fifo.c -index 2b636bb..55292de 100644 ---- a/qtfs/qtfs/fifo.c -+++ b/qtfs/qtfs/fifo.c -@@ -117,6 +117,10 @@ ssize_t qtfs_fifo_readiter(struct kiocb *kio, struct iov_iter *iov) - int total = 0; - int ret; - -+ if (sigismember(¤t->pending.signal, SIGURG)) { -+ qtfs_err("signal SIGURG return eintr"); -+ return -EINTR; -+ } - if (pvar == NULL || !virt_addr_valid(pvar)) { - qtfs_err("invalid fifo read req, private data is invalid"); - return -EFAULT; -@@ -127,8 +131,9 @@ ssize_t qtfs_fifo_readiter(struct kiocb *kio, struct iov_iter *iov) - qtfs_info("fifo readiter len:%llu", req->len); - rsp = qtfs_remote_run(pvar, QTFS_REQ_READITER, sizeof(struct qtreq_fifo_read)); - if (IS_ERR_OR_NULL(rsp) || rsp->err != 0) { -- qtfs_err("remote run failed. or errno:%d", (rsp == NULL) ? -1 : rsp->err); -- return -EFAULT; -+ qtfs_err("remote run failed. or errno:%d", IS_ERR_OR_NULL(rsp) ? -1 : rsp->err); -+ //return -EFAULT; -+ return (rsp == NULL) ? -EFAULT : (ssize_t)rsp; - } - - while (total < rsp->len) { -@@ -154,6 +159,10 @@ ssize_t qtfs_fifo_writeiter(struct kiocb *kio, struct iov_iter *iov) - struct qtreq_fifo_write *req; - struct qtrsp_fifo_write *rsp; - -+ if (sigismember(¤t->pending.signal, SIGURG)) { -+ qtfs_err("signal SIGURG return eintr"); -+ return -EINTR; -+ } - if (pvar == NULL || !virt_addr_valid(pvar)) { - qtfs_err("invalid fifo write req, private data is invalid"); - return -EFAULT; -@@ -164,9 +173,10 @@ ssize_t qtfs_fifo_writeiter(struct kiocb *kio, struct iov_iter *iov) - pvar->iov_send = iov; - rsp = qtfs_remote_run(pvar, QTFS_REQ_WRITE, sizeof(struct qtreq_fifo_write)); - if (IS_ERR_OR_NULL(rsp) || rsp->err != 0) { -- qtfs_err("fifo write remote run failed, or errno:%d", (rsp == NULL) ? -1 : rsp->err); -- return -EFAULT; -+ qtfs_err("fifo write remote run failed, or errno:%d", IS_ERR_OR_NULL(rsp) ? -1 : rsp->err); -+ return (rsp == NULL) ? -EFAULT : (ssize_t)rsp; - } -+ qtfs_info("fifo write over err:%d len:%llu", rsp->err, rsp->len); - return rsp->len; - } - -@@ -179,11 +189,12 @@ int qtfs_fifo_release(struct inode *inode, struct file *file) - qtfs_err("invalid fifo write req, private data is invalid"); - return -EFAULT; - } -- pvar->vec_recv.iov_len = QTFS_MSG_HEAD_LEN; -+ pvar->vec_recv.iov_len = pvar->recv_max; - rsp = qtfs_remote_run(pvar, QTFS_REQ_CLOSE, 0); - if (IS_ERR_OR_NULL(rsp)) { - qtfs_err("fifo close failed"); - } -+ qtfs_info("fifo release req over"); - qtfs_fifo_put_file(file); - return 0; - } -diff --git a/qtfs/qtfs/qtfs-mod.c b/qtfs/qtfs/qtfs-mod.c -index ad0bfc5..c4ef72c 100644 ---- a/qtfs/qtfs/qtfs-mod.c -+++ b/qtfs/qtfs/qtfs-mod.c -@@ -66,7 +66,7 @@ void *qtfs_remote_run(struct qtfs_conn_var_s *pvar, unsigned int type, unsigned - if (ret <= 0) { - qtfs_err("qtfs remote run send failed, ret:%d pvar sendlen:%lu.", ret, pvar->vec_send.iov_len); - qtinfo_senderrinc(req->type); -- return NULL; -+ return (void *)ret; - } - qtinfo_sendinc(type); - -@@ -87,7 +87,7 @@ retry: - } - // miss message retry would result in block - if (retrytimes >= 5) { -- qtfs_err("qtfs conn recv get mismatch seq_num too many times, stop retrying"); -+ qtfs_err("qtfs conn recv get mismatch seq_num too many times, stop retrying, signal:0x%lx", (unsigned long)current->pending.signal.sig[0]); - return NULL; - } - retrytimes++; -@@ -98,9 +98,9 @@ retry: - qtinfo_cntinc(QTINF_RESTART_SYS); - qtinfo_recverrinc(req->type); - } -- if (retrytimes >= 5) { -- qtfs_err("qtfs conn recv get retry signal(%d) too many times, stop retrying", ret); -- return NULL; -+ if (retrytimes >= 5 && ret == -EINTR) { -+ qtfs_err("qtfs conn recv get retry signal(%d) too many times, stop retrying, signal:0x%lx", ret, (unsigned long)current->pending.signal.sig[0]); -+ return (void *)ret; - } - retrytimes++; - msleep(1); -@@ -109,7 +109,7 @@ retry: - if (ret < 0) { - qtfs_err("qtfs remote run error, req_type:%u, ret:%d.", req->type, ret); - qtinfo_recverrinc(req->type); -- return NULL; -+ return (void *)ret; - } - if (retrytimes > 0) - qtfs_debug("qtfs remote run retry times:%lu.", retrytimes); -diff --git a/qtfs/qtfs_common/conn.c b/qtfs/qtfs_common/conn.c -index 99809d2..4f2f048 100644 ---- a/qtfs/qtfs_common/conn.c -+++ b/qtfs/qtfs_common/conn.c -@@ -274,6 +274,29 @@ int qtfs_conn_send(struct qtfs_conn_var_s *pvar) - return ret + iov_ret; - } - -+#ifdef QTFS_CLIENT -+static int qtfs_mismatch_fix(struct qtfs_conn_var_s *pvar) -+{ -+ struct qtreq *req = (struct qtreq *)pvar->vec_send.iov_base; -+ struct qtreq *rsp = (struct qtreq *)pvar->vec_recv.iov_base; -+ int ret; -+ size_t len; -+ if (req->seq_num == rsp->seq_num) -+ return 0; -+ -+ qtfs_err("recv mismatch package, req type:%u rsp type:%u req seq:%lu rsp seq:%lu", -+ req->type, rsp->type, req->seq_num, rsp->seq_num); -+ // 如果收到错包,到目前为止只接收了qtreq这个标准头,下面把rsp->len长度 -+ // 的socket缓冲区丢弃就行了 -+ len = rsp->len; -+ ret = pvar->conn_ops->conn_recv(&pvar->conn_var, pvar->vec_recv.iov_base, len, true); -+ if (ret != len) { -+ qtfs_err("mismatch drop failed, recv len:%lu ret:%d", len, ret); -+ } -+ return -1; -+} -+#endif -+ - int do_qtfs_conn_recv(struct qtfs_conn_var_s *pvar, bool block) - { - int ret = 0; -@@ -284,8 +307,10 @@ int do_qtfs_conn_recv(struct qtfs_conn_var_s *pvar, bool block) - int msglen = 0; - void *addr = NULL; - int leftlen = 0; -- int totallen = 0; - -+#ifdef QTFS_CLIENT -+start: -+#endif - headlen = pvar->conn_ops->conn_recv(&pvar->conn_var, pvar->vec_recv.iov_base, QTFS_MSG_HEAD_LEN, block); - if (headlen <= 0) { - return headlen; -@@ -294,6 +319,12 @@ int do_qtfs_conn_recv(struct qtfs_conn_var_s *pvar, bool block) - qtfs_err("qtfs recv headlen not valid, expect(%ld), get(%d)", QTFS_MSG_HEAD_LEN, headlen); - return headlen; - } -+#ifdef QTFS_CLIENT -+ if (qtfs_mismatch_fix(pvar) != 0) { -+ qtfs_err("mismatch package recved"); -+ goto start; -+ } -+#endif - - load.iov_base = pvar->vec_recv.iov_base + QTFS_MSG_HEAD_LEN; - load.iov_len = pvar->vec_recv.iov_len - QTFS_MSG_HEAD_LEN; -@@ -318,7 +349,7 @@ retry: - qtinfo_recverrinc(rsp->type); - } - #endif -- if (retrytimes >= 5) { -+ if (retrytimes >= 5 && ret == -EINTR) { - qtfs_err("qtfs recv get retry signal(%d) too many times, stop retrying", ret); - return ret; - } -@@ -331,12 +362,8 @@ retry: - return ret; - } - -- totallen += ret; -- if (totallen < msglen) { -- qtfs_err("qtfs conn recv %d msg, expect %d, goto retry", ret, msglen); -- addr += ret; -- leftlen -= ret; -- goto retry; -+ if (ret < msglen) { -+ qtfs_err("qtfs conn recv %d msg, expect %d", ret, msglen); - } - - if (ret > rsp->len) { -diff --git a/qtfs/qtfs_server/server_fifo.c b/qtfs/qtfs_server/server_fifo.c -index e1d9bd1..fc4c67c 100644 ---- a/qtfs/qtfs_server/server_fifo.c -+++ b/qtfs/qtfs_server/server_fifo.c -@@ -21,6 +21,7 @@ - #include - #include - -+int log_switch = 0; - #include "req.h" - #include "log.h" - #include "libsocket.h" -@@ -227,22 +228,26 @@ static void fifo_proc_ack(struct fifo_event_t *evt, int type, int sockfd, char * - { - int ret; - struct qtreq rsp; -+ char *msg = (char *)malloc(sizeof(rsp) + arglen); -+ if (msg == NULL) { -+ log_err("malloc failed:%d.", errno); -+ return; -+ } - - rsp.type = type; - rsp.err = 0; - rsp.seq_num = evt->seq_num; - rsp.len = arglen; - -- ret = write(sockfd, &rsp, sizeof(struct qtreq)); -+ memcpy(msg, &rsp, sizeof(rsp)); -+ memcpy(&msg[sizeof(rsp)], arg, arglen); -+ -+ ret = write(sockfd, msg, sizeof(struct qtreq) + arglen); -+ free(msg); - if (ret < 0) { - log_err("fifo ack type:%d failed, sockfd:%d err:%d", type, sockfd, errno); - return; - } -- ret = write(sockfd, arg, arglen); -- if (ret < 0) { -- log_err("fifo ack arg type:%d failed, sockfd:%d err:%d", type, sockfd, errno); -- return; -- } - log_info("Type:%d ack successed, sockfd:%d.", type, sockfd); - return; - } -@@ -639,6 +644,8 @@ int fifo_proc_main_sock(struct fifo_event_t *evt) - return FIFO_RET_OK; - } - -+ -+extern int engine_run; - void *fifo_server_main_thread(void *arg) - { - int indx = 0; -@@ -673,7 +680,7 @@ void *fifo_server_main_thread(void *arg) - - fifo_add_event(sockfd, NULL, fifo_proc_main_sock, NULL, EPOLLIN); - -- while (1) { -+ while (engine_run) { - int ret; - struct fifo_event_t *event; - int n = epoll_wait(epollfd, evts, EPOLL_MAX_EVENT_NUMS, 1000); --- -2.37.1 (Apple Git-137.1) - diff --git a/0002-fix-virsh-console-problem.patch b/0002-fix-virsh-console-problem.patch deleted file mode 100644 index 0747e3852d112cc3da920f4edf687b271e445729..0000000000000000000000000000000000000000 --- a/0002-fix-virsh-console-problem.patch +++ /dev/null @@ -1,150 +0,0 @@ -From 7f99bba84646a5efe0f25f83e6c45e70537798bd Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Fri, 8 Dec 2023 17:18:42 +0800 -Subject: [PATCH 2/3] fix virsh console problem - -Signed-off-by: liqiang ---- - qtfs/qtfs/fifo.c | 6 +++--- - qtfs/qtfs/qtfs-mod.h | 1 + - qtfs/qtfs/sb.c | 1 + - qtfs/qtfs_server/server_fifo.c | 21 ++++++++++++++++----- - 4 files changed, 21 insertions(+), 8 deletions(-) - -diff --git a/qtfs/qtfs/fifo.c b/qtfs/qtfs/fifo.c -index 55292de..829ce66 100644 ---- a/qtfs/qtfs/fifo.c -+++ b/qtfs/qtfs/fifo.c -@@ -199,8 +199,8 @@ int qtfs_fifo_release(struct inode *inode, struct file *file) - return 0; - } - --static __poll_t --qtfs_fifo_poll(struct file *filp, poll_table *wait) -+__poll_t -+qtfs_poll(struct file *filp, poll_table *wait) - { - struct qtfs_inode_priv *priv = filp->f_inode->i_private; - __poll_t mask = 0; -@@ -248,5 +248,5 @@ struct file_operations qtfsfifo_ops = { - .open = qtfs_fifo_open, - .release = qtfs_fifo_release, - .llseek = no_llseek, -- .poll = qtfs_fifo_poll, -+ .poll = qtfs_poll, - }; -diff --git a/qtfs/qtfs/qtfs-mod.h b/qtfs/qtfs/qtfs-mod.h -index cecce11..21d2f2d 100644 ---- a/qtfs/qtfs/qtfs-mod.h -+++ b/qtfs/qtfs/qtfs-mod.h -@@ -192,6 +192,7 @@ int qtfs_utils_register(void); - void qtfs_utils_destroy(void); - void qtfs_whitelist_clearall(void); - void qtfs_whitelist_initset(void); -+__poll_t qtfs_poll(struct file *filp, poll_table *wait); - - #endif - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index 79f1f89..a0d0964 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -747,6 +747,7 @@ static struct file_operations qtfs_file_ops = { - .llseek = qtfs_llseek, - .fsync = qtfs_fsync, - .unlocked_ioctl = qtfs_ioctl, -+ .poll = qtfs_poll, - }; - - static int qtfs_readpage(struct file *file, struct page *page) -diff --git a/qtfs/qtfs_server/server_fifo.c b/qtfs/qtfs_server/server_fifo.c -index fc4c67c..0eaadea 100644 ---- a/qtfs/qtfs_server/server_fifo.c -+++ b/qtfs/qtfs_server/server_fifo.c -@@ -190,15 +190,20 @@ void fifo_suspend_event(struct fifo_event_t *evt) - - static int fifo_peer_index; - static struct fifo_event_t *fifo_peer_evt[EPOLL_MAX_EVENT_NUMS]; --static int fifo_del_peer(int flag, struct fifo_event_t *peer) -+static int fifo_del_peer(int flag, struct fifo_event_t *me) - { -+ // 自己已经先被peer加过了就不必加peer了,peer此时已释放 -+ for (int i = 0; i < fifo_peer_index; i++) { -+ if (fifo_peer_evt[i] == me) -+ return 0; -+ } - switch (flag) { - case FIFO_PEER_PRE: - fifo_peer_index = 0; - memset(fifo_peer_evt, 0, sizeof(struct fifo_event_t *) * EPOLL_MAX_EVENT_NUMS); - break; - case FIFO_PEER_ADD: -- fifo_peer_evt[fifo_peer_index] = peer; -+ fifo_peer_evt[fifo_peer_index] = me->peerevt; - break; - case FIFO_PEER_POST: - for (int i = 0; i < fifo_peer_index; i++) { -@@ -288,6 +293,7 @@ int fifo_proc_readable(struct fifo_event_t *evt) - char *msg; - struct qtrsp_fifo_read *rsp; - int readlen = evt->len; -+ int error_ret = FIFO_RET_SUSPEND; - if (readlen > QTFS_REQ_MAX_LEN) { - log_err("Read rsp len:%d too large!", readlen); - ret = EINVAL; -@@ -307,6 +313,8 @@ int fifo_proc_readable(struct fifo_event_t *evt) - log_err("read from fifo:%d failed, readlen:%d, errno:%d", evt->fd, readlen, errno); - ret = errno; - free(msg); -+ if (errno == EPIPE) -+ error_ret = FIFO_RET_DEL_BOTH; - goto err_ack; - } - rsp->err = 0; -@@ -327,7 +335,7 @@ err_ack: - fifo_proc_ack(evt, QTFS_REQ_READITER, evt->peerevt->fd, (char *)&errrsp, sizeof(errrsp)); - } while (0); - evt->peerevt->peerevt = NULL; -- return FIFO_RET_SUSPEND; -+ return error_ret; - } - - int fifo_proc_writeable(struct fifo_event_t *evt) -@@ -337,6 +345,7 @@ int fifo_proc_writeable(struct fifo_event_t *evt) - char *msg; - struct qtrsp_fifo_write rsp; - int writelen = evt->len; -+ int error_ret = FIFO_RET_SUSPEND; - if (writelen > QTFS_REQ_MAX_LEN) { - log_err("Read rsp len:%d too large!", writelen); - ret = EINVAL; -@@ -361,6 +370,8 @@ int fifo_proc_writeable(struct fifo_event_t *evt) - log_err("write to fifo failed, ret:%d errno:%d", ret, errno); - ret = errno; - free(msg); -+ if (errno == EPIPE) -+ error_ret = FIFO_RET_DEL_BOTH; - goto err_ack; - } - rsp.err = 0; -@@ -379,7 +390,7 @@ err_ack: - errrsp.len = 0; - fifo_proc_ack(evt, QTFS_REQ_WRITE, evt->peerevt->fd, (char *)&errrsp, sizeof(errrsp)); - } while (0); -- return FIFO_RET_SUSPEND; -+ return error_ret; - } - - // 处理读请求,读可能阻塞,因为打开时已经确定是否阻塞型, -@@ -700,7 +711,7 @@ void *fifo_server_main_thread(void *arg) - } else if (ret == FIFO_RET_DEL) { - fifo_del_event(event); - } else if (ret == FIFO_RET_DEL_BOTH) { -- fifo_del_peer(FIFO_PEER_ADD, event->peerevt); -+ fifo_del_peer(FIFO_PEER_ADD, event); - fifo_del_event(event); - } - } --- -2.37.1 (Apple Git-137.1) - diff --git a/0003-delete-write-path-buf-to-log-info.patch b/0003-delete-write-path-buf-to-log-info.patch deleted file mode 100644 index d5635134b146b5e6425fe00e9a25858109a8c36a..0000000000000000000000000000000000000000 --- a/0003-delete-write-path-buf-to-log-info.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 44efcff94d48fe022d0eb76924ac549a3dc4d9ab Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= -Date: Sat, 9 Dec 2023 08:26:04 +0000 -Subject: [PATCH 3/3] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BF=A1=E6=81=AF?= - =?UTF-8?q?=E4=B8=AD=E5=88=A0=E9=99=A4=E6=89=93=E5=8D=B0write=E5=86=85?= - =?UTF-8?q?=E5=AE=B9=EF=BC=8C=E9=98=B2=E6=AD=A2=E4=BF=A1=E6=81=AF=E6=B3=84?= - =?UTF-8?q?=E9=9C=B2?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: 李强 ---- - qtfs/qtfs/sb.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index a0d0964..fb60261 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -480,7 +480,7 @@ ssize_t qtfs_writeiter(struct kiocb *kio, struct iov_iter *iov) - wake_up_interruptible_sync_poll(&priv->readq, EPOLLIN | EPOLLRDNORM); - if (S_ISCHR(inode->i_mode)) { - wake_up_interruptible_poll(&priv->readq, EPOLLIN); -- qtfs_err("writeiter file:%s char:<%s> wakup poll.", filp->f_path.dentry->d_iname, req->path_buf); -+ qtfs_err("writeiter file:%s len:%lu wakup poll.", filp->f_path.dentry->d_iname, len - leftlen); - } - } while (0); - qtfs_info("qtfs write %s over, leftlen:%lu.", filp->f_path.dentry->d_iname, leftlen); --- -2.37.1 (Apple Git-137.1) - diff --git a/0004-fix-rexec-exit-code-bug-and-fix-some-warning.patch b/0004-fix-rexec-exit-code-bug-and-fix-some-warning.patch deleted file mode 100644 index 6e2dd25713238e0c8a9bf2336950bdd258660d73..0000000000000000000000000000000000000000 --- a/0004-fix-rexec-exit-code-bug-and-fix-some-warning.patch +++ /dev/null @@ -1,115 +0,0 @@ -From f624bc7602c459de3cbbcd691309c1c66438d109 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Mon, 11 Dec 2023 10:46:07 +0800 -Subject: [PATCH 04/12] fix rexec exit code bug, and fix some warning - -Signed-off-by: liqiang ---- - qtfs/qtfs/qtfs-mod.c | 6 +++--- - qtfs/rexec/rexec.c | 11 ++++++----- - qtfs/rexec/rexec_server.c | 6 ++++-- - 3 files changed, 13 insertions(+), 10 deletions(-) - -diff --git a/qtfs/qtfs/qtfs-mod.c b/qtfs/qtfs/qtfs-mod.c -index c4ef72c..0b6cd65 100644 ---- a/qtfs/qtfs/qtfs-mod.c -+++ b/qtfs/qtfs/qtfs-mod.c -@@ -66,7 +66,7 @@ void *qtfs_remote_run(struct qtfs_conn_var_s *pvar, unsigned int type, unsigned - if (ret <= 0) { - qtfs_err("qtfs remote run send failed, ret:%d pvar sendlen:%lu.", ret, pvar->vec_send.iov_len); - qtinfo_senderrinc(req->type); -- return (void *)ret; -+ return ERR_PTR(ret); - } - qtinfo_sendinc(type); - -@@ -100,7 +100,7 @@ retry: - } - if (retrytimes >= 5 && ret == -EINTR) { - qtfs_err("qtfs conn recv get retry signal(%d) too many times, stop retrying, signal:0x%lx", ret, (unsigned long)current->pending.signal.sig[0]); -- return (void *)ret; -+ return ERR_PTR(ret); - } - retrytimes++; - msleep(1); -@@ -109,7 +109,7 @@ retry: - if (ret < 0) { - qtfs_err("qtfs remote run error, req_type:%u, ret:%d.", req->type, ret); - qtinfo_recverrinc(req->type); -- return (void *)ret; -+ return ERR_PTR(ret); - } - if (retrytimes > 0) - qtfs_debug("qtfs remote run retry times:%lu.", retrytimes); -diff --git a/qtfs/rexec/rexec.c b/qtfs/rexec/rexec.c -index 060abc5..e24c0ad 100644 ---- a/qtfs/rexec/rexec.c -+++ b/qtfs/rexec/rexec.c -@@ -183,7 +183,7 @@ static int rexec_conn_msg(struct rexec_client_event *evt) - } - } else { - char msg[sizeof(struct rexec_msg) + 1]; -- struct rexec_msg *hs = msg; -+ struct rexec_msg *hs = (struct rexec_msg *)msg; - char *ok = hs->msg; - hs->msgtype = REXEC_HANDSHAKE; - hs->msglen = 1; -@@ -558,7 +558,7 @@ err_end: - static int rexec_handshake_proc(struct rexec_client_event *evt) - { - char msg[sizeof(struct rexec_msg) + 1]; -- struct rexec_msg *hs = msg; -+ struct rexec_msg *hs = (struct rexec_msg *)msg; - int ret = read(evt->fd, hs->msg, 1); - if (ret <= 0) { - rexec_err("read from handshake pipe failed, ret:%d err:%d", ret, errno); -@@ -686,8 +686,9 @@ static void *rexec_pipe_proxy_thread(void *arg) - static void *rexec_conn_thread(void *arg) - { - struct rexec_thread_arg *parg = (struct rexec_thread_arg *)arg; -+ int exit_status = rexec_run(parg->efd, parg->connfd, parg->argv); - -- return (void *)rexec_run(parg->efd, parg->connfd, parg->argv); -+ pthread_exit((void *)&exit_status); - } - - static void rexec_global_var_init() -@@ -763,9 +764,9 @@ int main(int argc, char *argv[]) - connarg.connfd = connfd; - connarg.argv = argv; - (void)pthread_create(&thrd_conn, NULL, rexec_conn_thread, &connarg); -- pthread_join(thrd_conn, (void *)&exit_status); -+ pthread_join(thrd_conn, (void **)&exit_status); - fclose(rexec_logfile); -- exit((int)exit_status); -+ exit(*(int *)exit_status); - err_end: - fclose(rexec_logfile); - rexec_logfile = NULL; -diff --git a/qtfs/rexec/rexec_server.c b/qtfs/rexec/rexec_server.c -index 7182a9e..5e571fd 100644 ---- a/qtfs/rexec/rexec_server.c -+++ b/qtfs/rexec/rexec_server.c -@@ -379,7 +379,7 @@ static int rexec_start_new_process(int newconnfd) - char *ack; - int mypid = getpid(); - char msg[sizeof(struct rexec_msg) + 1]; -- struct rexec_msg *pm = msg; -+ struct rexec_msg *pm = (struct rexec_msg *)msg; - pm->msgtype = REXEC_PIDMAP; - pm->msglen = 0; - pm->pid = mypid; -@@ -443,7 +443,9 @@ err_free: - err_to_parent: - do { - int errpid = -1; -- write(pipefd[PIPE_WRITE], &errpid, sizeof(int)); -+ if (write(pipefd[PIPE_WRITE], &errpid, sizeof(int)) <= 0) { -+ rexec_err("write err ack to parent failed, errno:%d", errno); -+ } - } while (0); - - exit(0); --- -2.37.1 (Apple Git-137.1) - diff --git a/0005-add-cmake-to-adapt-server-fifo.patch b/0005-add-cmake-to-adapt-server-fifo.patch deleted file mode 100644 index 681268d69003aa3d97bfd33bf734af3fea5bbcdf..0000000000000000000000000000000000000000 --- a/0005-add-cmake-to-adapt-server-fifo.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 0c20dd74f9acc47da17ce0e94c6616b0961f3854 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Mon, 11 Dec 2023 11:19:19 +0800 -Subject: [PATCH 05/12] add cmake to adapt server fifo - -Signed-off-by: liqiang ---- - qtfs/CMakeLists.txt | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/qtfs/CMakeLists.txt b/qtfs/CMakeLists.txt -index 012c8db..4d0e9e3 100644 ---- a/qtfs/CMakeLists.txt -+++ b/qtfs/CMakeLists.txt -@@ -18,8 +18,8 @@ target_include_directories(udsproxyd PRIVATE include/ /usr/include/glib-2.0 /usr - target_link_libraries(udsproxyd PRIVATE pthread glib-2.0) - - # Build engine --add_executable(engine ipc/uds_main.c ipc/uds_event.c qtfs_common/user_engine.c) --target_include_directories(engine PRIVATE include/ ./ ipc/ /usr/include/glib-2.0 /usr/lib64/glib-2.0/include) -+add_executable(engine ipc/uds_main.c ipc/uds_event.c qtfs_common/user_engine.c qtfs_server/server_fifo.c qtfs_common/libsocket.c) -+target_include_directories(engine PRIVATE include/ ./ ipc/ qtfs_common/ /usr/include/glib-2.0 /usr/lib64/glib-2.0/include) - target_link_libraries(engine PRIVATE glib-2.0 pthread) - target_compile_options(engine PRIVATE "-DQTFS_SERVER") - --- -2.37.1 (Apple Git-137.1) - diff --git a/0006-code-style-problem-fix.patch b/0006-code-style-problem-fix.patch deleted file mode 100644 index a75be7ccc6afad470d2d5631628b115b079825c6..0000000000000000000000000000000000000000 --- a/0006-code-style-problem-fix.patch +++ /dev/null @@ -1,534 +0,0 @@ -From ba079528b3c1c0fd911ee98353685c4116c8e6f8 Mon Sep 17 00:00:00 2001 -From: Deng Guangxing -Date: Mon, 11 Dec 2023 14:20:51 +0800 -Subject: [PATCH 06/12] code-style problem fix - -Signed-off-by: Deng Guangxing ---- - qtfs/ipc/uds_event.c | 6 +- - qtfs/qtfs/fifo.c | 39 ++++++------- - qtfs/qtfs/proc.c | 10 ++-- - qtfs/qtfs/qtfs-mod.c | 6 +- - qtfs/qtfs/sb.c | 7 +-- - qtfs/qtfs_common/qtfs_check.c | 103 ++++++++++++---------------------- - qtfs/rexec/rexec.c | 11 ++-- - 7 files changed, 77 insertions(+), 105 deletions(-) - -diff --git a/qtfs/ipc/uds_event.c b/qtfs/ipc/uds_event.c -index 4253deb..78a2a97 100644 ---- a/qtfs/ipc/uds_event.c -+++ b/qtfs/ipc/uds_event.c -@@ -524,7 +524,7 @@ static int uds_msg_scm_regular_file(int scmfd, int tcpfd, struct uds_event_globa - uds_err("failed to calloc memory"); - return EVENT_ERR; - } -- sprintf(fdproc, "/proc/self/fd/%d", scmfd); -+ snprintf(fdproc, UDS_PATH_MAX, "/proc/self/fd/%d", scmfd); - ret = readlink(fdproc, p_scmr->path, UDS_PATH_MAX); - if (ret < 0) { - uds_err("readlink:%s error, ret:%d, errno:%d", fdproc, ret, errno); -@@ -562,7 +562,7 @@ static int uds_msg_scm_fifo_file(int scmfd, int tcpfd, struct uds_event_global_v - p_get->msgtype = MSG_SCM_PIPE; - p_get->msglen = sizeof(struct uds_stru_scm_pipe); - -- sprintf(path, "/proc/self/fd/%d", scmfd); -+ snprintf(path, FDPATH_LEN, "/proc/self/fd/%d", scmfd); - lstat(path, &st); - if (st.st_mode & S_IRUSR) { - p_pipe->dir = SCM_PIPE_READ; -@@ -1085,7 +1085,7 @@ int uds_event_debug_level(void *arg, int epfd, struct uds_event_global_var *p_ev - - uds_log("debug level accept a new connection, current level:%s change to:%s", UDS_LOG_STR(cur), UDS_LOG_STR(p_uds_var->loglevel)); - -- len = sprintf(p_event_var->iov_base, "+---------------UDS LOG LEVEL UPDATE--------------+\n" -+ len = snprintf(p_event_var->iov_base, p_event_var->iov_len, "+---------------UDS LOG LEVEL UPDATE--------------+\n" - "+ Log level is:%s before, now change to :%s.\n" - "+-------------------------------------------------+\n", UDS_LOG_STR(cur), UDS_LOG_STR(p_uds_var->loglevel)); - -diff --git a/qtfs/qtfs/fifo.c b/qtfs/qtfs/fifo.c -index 829ce66..f072706 100644 ---- a/qtfs/qtfs/fifo.c -+++ b/qtfs/qtfs/fifo.c -@@ -26,9 +26,9 @@ - - static void qtfs_fifo_put_file(struct file *file) - { -- struct private_data *priv = file->private_data; -- struct qtfs_conn_var_s *pvar = (struct qtfs_conn_var_s *)priv->priv; -- if (pvar == NULL) { -+ struct private_data *priv; -+ struct qtfs_conn_var_s *pvar; -+ if (file == NULL || (priv = file->private_data) == NULL || (pvar = (struct qtfs_conn_var_s *)priv->priv) == NULL) { - qtfs_err("fifo private data invalid to put"); - return; - } -@@ -110,8 +110,8 @@ int qtfs_fifo_open(struct inode *inode, struct file *file) - - ssize_t qtfs_fifo_readiter(struct kiocb *kio, struct iov_iter *iov) - { -- struct private_data *priv = kio->ki_filp->private_data; -- struct qtfs_conn_var_s *pvar = (struct qtfs_conn_var_s *)priv->priv; -+ struct private_data *priv; -+ struct qtfs_conn_var_s *pvar; - struct qtreq_fifo_read *req; - struct qtrsp_fifo_read *rsp; - int total = 0; -@@ -121,7 +121,7 @@ ssize_t qtfs_fifo_readiter(struct kiocb *kio, struct iov_iter *iov) - qtfs_err("signal SIGURG return eintr"); - return -EINTR; - } -- if (pvar == NULL || !virt_addr_valid(pvar)) { -+ if (!kio || !kio->ki_filp || (priv = kio->ki_filp->private_data) == NULL || (pvar = (struct qtfs_conn_var_s *)priv->priv) == NULL || !virt_addr_valid(pvar)) { - qtfs_err("invalid fifo read req, private data is invalid"); - return -EFAULT; - } -@@ -154,8 +154,8 @@ ssize_t qtfs_fifo_readiter(struct kiocb *kio, struct iov_iter *iov) - - ssize_t qtfs_fifo_writeiter(struct kiocb *kio, struct iov_iter *iov) - { -- struct private_data *priv = kio->ki_filp->private_data; -- struct qtfs_conn_var_s *pvar = (struct qtfs_conn_var_s *)priv->priv; -+ struct private_data *priv; -+ struct qtfs_conn_var_s *pvar; - struct qtreq_fifo_write *req; - struct qtrsp_fifo_write *rsp; - -@@ -163,7 +163,7 @@ ssize_t qtfs_fifo_writeiter(struct kiocb *kio, struct iov_iter *iov) - qtfs_err("signal SIGURG return eintr"); - return -EINTR; - } -- if (pvar == NULL || !virt_addr_valid(pvar)) { -+ if (!kio || !kio->ki_filp || (priv = kio->ki_filp->private_data) == NULL || (pvar = (struct qtfs_conn_var_s *)priv->priv) == NULL || !virt_addr_valid(pvar)) { - qtfs_err("invalid fifo write req, private data is invalid"); - return -EFAULT; - } -@@ -182,10 +182,11 @@ ssize_t qtfs_fifo_writeiter(struct kiocb *kio, struct iov_iter *iov) - - int qtfs_fifo_release(struct inode *inode, struct file *file) - { -- struct private_data *priv = file->private_data; -- struct qtfs_conn_var_s *pvar = (struct qtfs_conn_var_s *)priv->priv; -+ struct private_data *priv; -+ struct qtfs_conn_var_s *pvar; - struct qtrsp_fifo_close *rsp = NULL; -- if (pvar == NULL) { -+ -+ if (file == NULL || (priv = file->private_data) == NULL || (pvar = (struct qtfs_conn_var_s *)priv->priv) == NULL) { - qtfs_err("invalid fifo write req, private data is invalid"); - return -EFAULT; - } -@@ -202,22 +203,22 @@ int qtfs_fifo_release(struct inode *inode, struct file *file) - __poll_t - qtfs_poll(struct file *filp, poll_table *wait) - { -- struct qtfs_inode_priv *priv = filp->f_inode->i_private; -+ struct qtfs_inode_priv *priv; - __poll_t mask = 0; - struct list_head *p; - struct qtfs_conn_var_s *pvar; - struct qtreq_poll *req; - struct qtrsp_poll *rsp; -- struct private_data *fpriv = (struct private_data *)filp->private_data; -- -- poll_wait(filp, &priv->readq, wait); -- -- p = &priv->readq.head; -+ struct private_data *fpriv; - -- if (fpriv->fd < 0) { -+ if (!filp || !filp->f_inode || !(priv = filp->f_inode->i_private) || !(fpriv = (struct private_data *)filp->private_data) || fpriv->fd < 0) { - qtfs_err("fifo poll priv file invalid."); - return 0; - } -+ -+ poll_wait(filp, &priv->readq, wait); -+ p = &priv->readq.head; -+ - pvar = qtfs_conn_get_param(); - if (pvar == NULL) { - qtfs_err("qtfs fifo poll get param failed."); -diff --git a/qtfs/qtfs/proc.c b/qtfs/qtfs/proc.c -index 70238ea..deea1c8 100644 ---- a/qtfs/qtfs/proc.c -+++ b/qtfs/qtfs/proc.c -@@ -147,7 +147,7 @@ struct dentry *qtfs_proc_lookup(struct inode *parent_inode, struct dentry *child - if (pid > 0) { - sscanf(cpath, "/proc/%s", tmp); - memset(cpath, 0, MAX_PATH_LEN); -- sprintf(cpath, "/local_proc/%s", tmp); -+ snprintf(cpath, MAX_PATH_LEN, "/local_proc/%s", tmp); - qtfs_debug("[%s]: get path from local: %s\n", __func__, cpath); - ret = kern_path(cpath, 0, &spath); - if(ret) { -@@ -208,13 +208,13 @@ const char *qtfs_proc_getlink(struct dentry *dentry, - } - - if (!strncmp(path, "/proc/self", 11)) { -- sprintf(link, "/local_proc/%d", (int)current->pid); -+ snprintf(link, MAX_PATH_LEN, "/local_proc/%d", (int)current->pid); - qtfs_info("[%s] success: %s getlink: %s", __func__, path, link); - goto link_local; - } - - if (!strcmp(path, "/proc/mounts")) { -- sprintf(link, "/proc/1/mounts"); -+ snprintf(link, MAX_PATH_LEN, "/proc/1/mounts"); - qtfs_info("[%s] success: %s getlink /proc/1/mounts", __func__, path); - goto link_local; - } -@@ -222,7 +222,7 @@ const char *qtfs_proc_getlink(struct dentry *dentry, - pid = is_local_process(path); - if (pid > 0) { - sscanf(path, "/proc/%s", tmp); -- sprintf(link, "/local_proc/%s", tmp); -+ snprintf(link, MAX_PATH_LEN, "/local_proc/%s", tmp); - qtfs_info("[%s] success: %s getlink: %s", __func__, path, link); - goto link_local; - } -@@ -274,7 +274,7 @@ int qtfs_proc_getattr(const struct path *path, struct kstat *stat, u32 req_mask, - pid = is_local_process(cpath); - if (pid > 0) { - sscanf(cpath, "/proc/%s", tmp); -- sprintf(local_path, "/local_proc/%s", tmp); -+ snprintf(local_path, MAX_PATH_LEN, "/local_proc/%s", tmp); - ret = kern_path(local_path, 0, &spath); - if (ret) { - qtfs_err("[%s]: kern_path(%s) failed: %d", __func__, local_path, ret); -diff --git a/qtfs/qtfs/qtfs-mod.c b/qtfs/qtfs/qtfs-mod.c -index 0b6cd65..d49e9a2 100644 ---- a/qtfs/qtfs/qtfs-mod.c -+++ b/qtfs/qtfs/qtfs-mod.c -@@ -23,6 +23,8 @@ - #include "syscall.h" - #include "symbol_wrapper.h" - -+#define MAX_RETRY 5 -+ - static struct file_system_type qtfs_fs_type = { - .owner = THIS_MODULE, - .name = QTFS_FSTYPE_NAME, -@@ -86,7 +88,7 @@ retry: - pvar->miss_proc = 0; - } - // miss message retry would result in block -- if (retrytimes >= 5) { -+ if (retrytimes >= MAX_RETRY) { - qtfs_err("qtfs conn recv get mismatch seq_num too many times, stop retrying, signal:0x%lx", (unsigned long)current->pending.signal.sig[0]); - return NULL; - } -@@ -98,7 +100,7 @@ retry: - qtinfo_cntinc(QTINF_RESTART_SYS); - qtinfo_recverrinc(req->type); - } -- if (retrytimes >= 5 && ret == -EINTR) { -+ if (retrytimes >= MAX_RETRY && ret == -EINTR) { - qtfs_err("qtfs conn recv get retry signal(%d) too many times, stop retrying, signal:0x%lx", ret, (unsigned long)current->pending.signal.sig[0]); - return ERR_PTR(ret); - } -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index fb60261..a5bcc8e 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -155,8 +155,8 @@ int qtfs_readdir(struct file *filp, struct dir_context *ctx) - int count = 0; - struct getdents_callback64 *buf = container_of(ctx, struct getdents_callback64, ctx); - -- if (!pvar) { -- qtfs_err("Failed to get qtfs sock var"); -+ if (!pvar || !buf) { -+ qtfs_err("Failed to get qtfs sock var(%p) or gentdents(%p)", pvar, buf); - return -EINVAL; - } - -@@ -168,7 +168,6 @@ int qtfs_readdir(struct file *filp, struct dir_context *ctx) - req = pvar->conn_ops->get_conn_msg_buf(pvar, QTFS_SEND); - rsp = pvar->conn_ops->get_conn_msg_buf(pvar, QTFS_RECV); - QTFS_FULLNAME(req->path, filp->f_path.dentry, sizeof(req->path)); -- // req->count = sizeof(rsp->dirent); - count = sizeof(rsp->dirent); - if (buf && buf->count > 0 && buf->count < sizeof(rsp->dirent)) { - qtfs_info("readdir use input buf size(%d), prev_reclen(%d)", buf->count, buf->prev_reclen); -@@ -198,7 +197,6 @@ int qtfs_readdir(struct file *filp, struct dir_context *ctx) - } - dirent = (struct qtfs_dirent64 *)&rsp->dirent[idx]; - namelen = strlen(dirent->d_name); -- // ret = dir_emit(ctx, dirent->d_name, namelen, dirent->d_ino, dirent->d_type); - ret = ctx->actor(ctx, dirent->d_name, namelen, ctx->pos, dirent->d_ino, dirent->d_type); - if (ret == -EINTR) { - err = ret; -@@ -210,7 +208,6 @@ int qtfs_readdir(struct file *filp, struct dir_context *ctx) - (void *)dirent - (void *)rsp->dirent, dirent->d_name, ret, dirent->d_reclen, namelen, dirent->d_ino, dirent->d_type); - } - -- // ctx->pos = (rsp->d.over) ? -1 : rsp->d.pos; - ctx->pos = rsp->d.pos; - qtfs_info("qtfs readdir<%s> success ret:%d vldcnt:%d dircnt:%d over:%d pos:%lld.", - req->path, rsp->d.ret, rsp->d.vldcnt, dircnt, rsp->d.over, ctx->pos); -diff --git a/qtfs/qtfs_common/qtfs_check.c b/qtfs/qtfs_common/qtfs_check.c -index 8daad39..e2a7ec1 100644 ---- a/qtfs/qtfs_common/qtfs_check.c -+++ b/qtfs/qtfs_common/qtfs_check.c -@@ -15,6 +15,26 @@ - #include "req.h" - #include "qtfs_check.h" - -+#define do_path_check(ops) \ -+( \ -+ { \ -+ struct qtreq_##ops *req = TOREQ; \ -+ if (check_string(req->path, sizeof(req->path))) \ -+ return QTFS_CHECK_ERR; \ -+ return QTFS_CHECK_OK; \ -+ } \ -+) -+ -+#define do_fd_check(ops) \ -+( \ -+ { \ -+ struct qtreq_##ops *req = TOREQ; \ -+ if (check_fd(req->fd)) \ -+ return QTFS_CHECK_ERR; \ -+ return QTFS_CHECK_OK; \ -+ } \ -+) -+ - /* - 检查原则: - 1. 基本数据类型,据实严格判断合法范围,有数组、指针操作的注意数组越界或指针飞踩; -@@ -26,7 +46,7 @@ - // string类型基本防护,在max范围内最后一个字符必须是结束符,防止越界访问 - static inline bool check_string(char *str, size_t max) - { -- if (max == 0) -+ if (str == NULL || max == 0) - return false; - if (str[max - 1] != '\0') - return true; -@@ -50,37 +70,24 @@ int req_check_none(void *in) - - int req_check_mount(void *in) - { -- struct qtreq_mount *req = TOREQ; -- -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(mount); - } - - int req_check_open(void *in) - { -- struct qtreq_open *req = TOREQ; - - // flags 和 mode如果错误syscall会报错,不会有安全风险 -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(open); - } - - int req_check_close(void *in) - { -- struct qtreq_close *req = TOREQ; -- if (check_fd(req->fd)) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_fd_check(close); - } - - int req_check_readiter(void *in) - { -- struct qtreq_readiter *req = TOREQ; -- if (check_fd(req->fd)) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_fd_check(readiter); - } - - int req_check_write(void *in) -@@ -111,26 +118,17 @@ int req_check_readdir(void *in) - - int req_check_mkdir(void *in) - { -- struct qtreq_mkdir *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(mkdir); - } - - int req_check_rmdir(void *in) - { -- struct qtreq_rmdir *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(rmdir); - } - - int req_check_getattr(void *in) - { -- struct qtreq_getattr *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(getattr); - } - - int req_check_setattr(void *in) -@@ -143,26 +141,17 @@ int req_check_setattr(void *in) - - int req_check_icreate(void *in) - { -- struct qtreq_icreate *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(icreate); - } - - int req_check_mknod(void *in) - { -- struct qtreq_mknod *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(mknod); - } - - int req_check_unlink(void *in) - { -- struct qtreq_unlink *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(unlink); - } - - int req_check_symlink(void *in) -@@ -195,10 +184,7 @@ int req_check_link(void *in) - - int req_check_getlink(void *in) - { -- struct qtreq_getlink *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(getlink); - } - - int req_check_rename(void *in) -@@ -216,10 +202,7 @@ int req_check_rename(void *in) - } - int req_check_xattrlist(void *in) - { -- struct qtreq_xattrlist *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(xattrlist); - } - - int req_check_xattrget(void *in) -@@ -277,18 +260,12 @@ int req_check_sysumount(void *in) - - int req_check_fifopoll(void *in) - { -- struct qtreq_poll *req = TOREQ; -- if (check_fd(req->fd)) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_fd_check(poll); - } - - int req_check_statfs(void *in) - { -- struct qtreq_statfs *req = TOREQ; -- if (check_string(req->path, sizeof(req->path))) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_path_check(statfs); - } - - int req_check_ioctl(void *in) -@@ -303,18 +280,12 @@ int req_check_ioctl(void *in) - - int req_check_epoll_ctl(void *in) - { -- struct qtreq_epollctl *req = TOREQ; -- if (check_fd(req->fd)) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_fd_check(epollctl); - } - - int req_check_llseek(void *in) - { -- struct qtreq_llseek *req = TOREQ; -- if (check_fd(req->fd)) -- return QTFS_CHECK_ERR; -- return QTFS_CHECK_OK; -+ do_fd_check(llseek); - } - - int req_check_sc_kill(void *in) -diff --git a/qtfs/rexec/rexec.c b/qtfs/rexec/rexec.c -index e24c0ad..f905cfa 100644 ---- a/qtfs/rexec/rexec.c -+++ b/qtfs/rexec/rexec.c -@@ -150,7 +150,7 @@ static int rexec_conn_msg(struct rexec_client_event *evt) - rexec_err("Rexec pidmap msg > 1 error."); - return REXEC_EVENT_OK; - } -- sprintf(path, "%s/%d", REXEC_PIDMAP_PATH, mypid); -+ snprintf(path, REXEC_PIDMAP_PATH_LEN, "%s/%d", REXEC_PIDMAP_PATH, mypid); - fd = open(path, O_CREAT|O_WRONLY, 0600); - if (fd < 0) { - rexec_err("Rexec create pidmap:%d-%d failed, path:%s open failed:%d", -@@ -170,7 +170,7 @@ static int rexec_conn_msg(struct rexec_client_event *evt) - rexec_err("Rexec pidmap file:%s lseek 0 failed errno:%d rexec exit", path, err); - return REXEC_EVENT_EXIT; - } -- sprintf(buf, "%d", peerpid); -+ snprintf(buf, REXEC_PID_LEN, "%d", peerpid); - if ((err = write(fd, buf, strlen(buf))) <= 0) { - rexec_err("Rexec pidmap file:%s write pid:%d failed errno:%d rexec exit.", path, peerpid, err); - return REXEC_EVENT_EXIT; -@@ -316,7 +316,7 @@ static int rexec_run(int efd, int connfd, char *argv[]) - // clear pidmap file - if (pidfd > 0) { - char path[32] = {0}; -- sprintf(path, "%s/%d", REXEC_PIDMAP_PATH, getpid()); -+ snprintf(path, 32, "%s/%d", REXEC_PIDMAP_PATH, getpid()); - close(pidfd); - remove(path); - } -@@ -357,7 +357,7 @@ void rexec_clear_pids() - continue; - - memset(path, 0, sizeof(path)); -- sprintf(path, "%s/%s", REXEC_PIDMAP_PATH, entry->d_name); -+ snprintf(path, REXEC_PIDMAP_PATH_LEN, "%s/%s", REXEC_PIDMAP_PATH, entry->d_name); - fd = open(path, O_RDONLY); - if (fd <= 0) { - rexec_err("open pid file:%s failed", path); -@@ -401,7 +401,7 @@ static int rexec_get_fdinfo(struct dirent *fdentry, struct rexec_fdinfo *fdinfo) - return -1; - if (!rexec_is_reg_file(fd)) - return -1; -- sprintf(path, "/proc/self/fd/%s", fdentry->d_name); -+ snprintf(path, 32, "/proc/self/fd/%s", fdentry->d_name); - ret = readlink(path, fdinfo->path, REXEC_PATH_MAX); - if (ret < 0) { - rexec_err("Get fd:%d link failed.", fd); -@@ -624,6 +624,7 @@ static int rexec_send_binary_msg(int efd, int argc, char *argv[], int arglen, ch - pmsg->argc = argc - 1; // for remote binary's argc is argc-1 - // pmsg->msg is like: "binary"\0"argv[1]"\0"argv[2]"\0"..." - pmsg->msglen = rexec_msg_fill_argv(pmsg->argc, &argv[1], bufmsg); -+ // bufmsg len has been calculated to make sure it will not overflow. - strcpy(&bufmsg[pmsg->msglen], fds_json); - pmsg->msglen += strlen(fds_json); - free(fds_json); --- -2.37.1 (Apple Git-137.1) - diff --git a/0007-do-not-output-addr-in-kernel.patch b/0007-do-not-output-addr-in-kernel.patch deleted file mode 100644 index d8a8d787cffa70db64e44bc053669c2c2c4618ca..0000000000000000000000000000000000000000 --- a/0007-do-not-output-addr-in-kernel.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 8b34c899b08ee078e988c900b90d9b925f5535aa Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Mon, 11 Dec 2023 19:48:50 +0800 -Subject: [PATCH 07/12] do not output addr in kernel - -Signed-off-by: liqiang ---- - qtfs/qtfs/sb.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index a5bcc8e..0babad1 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -156,7 +156,8 @@ int qtfs_readdir(struct file *filp, struct dir_context *ctx) - struct getdents_callback64 *buf = container_of(ctx, struct getdents_callback64, ctx); - - if (!pvar || !buf) { -- qtfs_err("Failed to get qtfs sock var(%p) or gentdents(%p)", pvar, buf); -+ qtfs_err("Failed to get qtfs sock var(%s) or gentdents(%s)", -+ (!pvar) ? "INVALID" : "VALID", (!buf) ? "INVALID" : "VALID"); - return -EINVAL; - } - --- -2.37.1 (Apple Git-137.1) - diff --git a/0008-fix-coredump-run-binary-after-copy-in-client.patch b/0008-fix-coredump-run-binary-after-copy-in-client.patch deleted file mode 100644 index 9838c0d46d8224adc708f641bd397a0408eaabca..0000000000000000000000000000000000000000 --- a/0008-fix-coredump-run-binary-after-copy-in-client.patch +++ /dev/null @@ -1,37 +0,0 @@ -From d5de8eaa514e2a29cd85f0bb4eae7850bfe59c88 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Mon, 11 Dec 2023 21:46:43 +0800 -Subject: [PATCH 08/12] fix coredump run binary after copy in client - -Signed-off-by: liqiang ---- - qtfs/qtfs/sb.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index fb60261..68ad696 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -482,6 +482,11 @@ ssize_t qtfs_writeiter(struct kiocb *kio, struct iov_iter *iov) - wake_up_interruptible_poll(&priv->readq, EPOLLIN); - qtfs_err("writeiter file:%s len:%lu wakup poll.", filp->f_path.dentry->d_iname, len - leftlen); - } -+ if (inode->i_size < kio->ki_pos) { -+ qtfs_info("file:%s write pos reached:%lld and inode size is:%lld just update.", -+ filp->f_path.dentry->d_iname, kio->ki_pos, inode->i_size); -+ inode->i_size = kio->ki_pos; -+ } - } while (0); - qtfs_info("qtfs write %s over, leftlen:%lu.", filp->f_path.dentry->d_iname, leftlen); - qtfs_conn_put_param(pvar); -@@ -1331,6 +1336,7 @@ int qtfs_getattr(const struct path *path, struct kstat *stat, u32 req_mask, unsi - qtfs_conn_put_param(pvar); - return ret; - } -+ inode->i_size = rsp->stat.size; - *stat = rsp->stat; - if (path->dentry && path->dentry->d_inode && S_ISDIR(path->dentry->d_inode->i_mode)) - path->dentry->d_time = jiffies; --- -2.37.1 (Apple Git-137.1) - diff --git a/0009-get-mount-pointer-error-when-remote-mount-path-is-sa.patch b/0009-get-mount-pointer-error-when-remote-mount-path-is-sa.patch deleted file mode 100644 index 99d01bd1ed1a67755498b4a8fdf3aab69ef99490..0000000000000000000000000000000000000000 --- a/0009-get-mount-pointer-error-when-remote-mount-path-is-sa.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 4352197e314767a644c46b43a08fc02b67d9dd63 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Tue, 12 Dec 2023 11:53:18 +0800 -Subject: [PATCH 09/12] get mount pointer error when remote mount path is same - as local path - -Signed-off-by: liqiang ---- - qtfs/qtfs/sb.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index fb60261..68ed8d8 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -107,7 +107,7 @@ static inline char *qtfs_mountpoint_path_init(struct dentry *dentry, struct path - if (IS_ERR_OR_NULL(ret)) { - qtfs_err("d_absolute_path failed:%ld", QTFS_PTR_ERR(ret)); - } else { -- if (strcmp(mnt_file, "/")) { -+ if (strcmp(ret, mnt_file) != 0 && strcmp(mnt_file, "/")) { - mnt_point = strstr(ret, mnt_file); - qtfs_info("mnt point:%s", mnt_point); - if (mnt_point) { --- -2.37.1 (Apple Git-137.1) - diff --git a/0010-bugfix-unix-socket-connection-refuse-after-chmod-mod.patch b/0010-bugfix-unix-socket-connection-refuse-after-chmod-mod.patch deleted file mode 100644 index 7fdb918e5c62075473d0f8d878978c3471ad2319..0000000000000000000000000000000000000000 --- a/0010-bugfix-unix-socket-connection-refuse-after-chmod-mod.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 0626a247f1b30b71f74f0eb7cd0890c4c469e6a6 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Wed, 13 Dec 2023 14:48:11 +0800 -Subject: [PATCH 10/12] bugfix: unix socket connection refuse after chmod - modify socket file - -Signed-off-by: liqiang ---- - qtfs/qtfs/sb.c | 38 ++++++++++++++++++++++++++++++++------ - 1 file changed, 32 insertions(+), 6 deletions(-) - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index fefb6c1..4ecbf50 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -35,6 +35,17 @@ static struct inode_operations qtfs_inode_ops; - static struct inode_operations qtfs_symlink_inode_ops; - struct inode *qtfs_iget(struct super_block *sb, struct inode_info *ii); - extern ssize_t qtfs_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size); -+static void qtfs_copy_kstat_inode(struct inode *inode, struct kstat *stat) -+{ -+ inode->i_mode = stat->mode; -+ inode->i_size = stat->size; -+ inode->i_uid = stat->uid; -+ inode->i_gid = stat->gid; -+ inode->i_atime = stat->atime; -+ inode->i_mtime = stat->mtime; -+ inode->i_ctime = stat->ctime; -+} -+ - int qtfs_statfs(struct dentry *dentry, struct kstatfs *buf) - { - struct qtfs_conn_var_s *pvar = qtfs_conn_get_param(); -@@ -1340,16 +1351,28 @@ int qtfs_getattr(const struct path *path, struct kstat *stat, u32 req_mask, unsi - path->dentry->d_time = jiffies; - qtfs_debug("qtfs getattr success:<%s> blksiz:%u size:%lld mode:%o ino:%llu pathino:%lu. %s\n", req->path, rsp->stat.blksize, - rsp->stat.size, rsp->stat.mode, rsp->stat.ino, inode->i_ino, rsp->stat.ino != inode->i_ino ? "delete current inode" : ""); -- if (inode->i_ino != rsp->stat.ino || inode->i_mode != rsp->stat.mode) { -+ if (inode->i_ino != rsp->stat.ino) { - if (inode->i_nlink > 0){ - drop_nlink(inode); - } - d_invalidate(path->dentry); - } -+ qtfs_copy_kstat_inode(inode, &rsp->stat); - qtfs_conn_put_param(pvar); - return 0; - } - -+static void qtfs_copy_iattr_inode(struct inode *inode, struct iattr *attr) -+{ -+ inode->i_mode = attr->ia_mode; -+ inode->i_uid = attr->ia_uid; -+ inode->i_gid = attr->ia_gid; -+ inode->i_size = attr->ia_size; -+ inode->i_atime = attr->ia_atime; -+ inode->i_mtime = attr->ia_mtime; -+ inode->i_ctime = attr->ia_ctime; -+} -+ - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)) - int qtfs_setattr(struct mnt_idmap *idmap, struct dentry *dentry, struct iattr *attr) - #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0)) -@@ -1385,6 +1408,8 @@ int qtfs_setattr(struct dentry *dentry, struct iattr *attr) - qtfs_conn_put_param(pvar); - return ret; - } -+ // 成功后更新local的inode信息 -+ qtfs_copy_iattr_inode(dentry->d_inode, &req->attr); - qtfs_info("qtfs setattr <%s> success.\n", req->path); - qtfs_conn_put_param(pvar); - return 0; -@@ -1558,7 +1583,7 @@ int qtfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) - pvar = qtfs_conn_get_param(); - if (!pvar) { - qtfs_err("Failed to get qtfs sock var\n"); -- return 0; -+ return 1; - } - - req = pvar->conn_ops->get_conn_msg_buf(pvar, QTFS_SEND); -@@ -1569,24 +1594,25 @@ int qtfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) - rsp = qtfs_remote_run(pvar, QTFS_REQ_GETATTR, QTFS_SEND_SIZE(struct qtreq_getattr, req->path)); - if (IS_ERR_OR_NULL(rsp)) { - qtfs_conn_put_param(pvar); -- return 0; -+ return 1; - } - if (rsp->ret) { - qtfs_conn_put_param(pvar); -- return 0; -+ return 1; - } - - inode = dentry->d_inode; - if (inode == NULL) { - qtfs_conn_put_param(pvar); -- return 0; -+ return 1; - } -- if (inode->i_ino != rsp->stat.ino || inode->i_mode != rsp->stat.mode) { -+ if (inode->i_ino != rsp->stat.ino) { - if (inode->i_nlink > 0) - drop_nlink(inode); - qtfs_conn_put_param(pvar); - return 0; - } -+ qtfs_copy_kstat_inode(inode, &rsp->stat); - qtfs_conn_put_param(pvar); - dentry->d_time = jiffies; - } --- -2.37.1 (Apple Git-137.1) - diff --git a/0011-filter-af-unix-before-whitelist-check.patch b/0011-filter-af-unix-before-whitelist-check.patch deleted file mode 100644 index 8b38b39c8952d7f183a3dd16764ec080394817d5..0000000000000000000000000000000000000000 --- a/0011-filter-af-unix-before-whitelist-check.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 039a2c19c0b854cebfc63666b55c9f83f6cd9510 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Wed, 13 Dec 2023 15:23:35 +0800 -Subject: [PATCH 11/12] filter af unix before whitelist check - -Signed-off-by: liqiang ---- - qtfs/qtfs_common/conn.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/qtfs/qtfs_common/conn.c b/qtfs/qtfs_common/conn.c -index 4f2f048..1974c06 100644 ---- a/qtfs/qtfs_common/conn.c -+++ b/qtfs/qtfs_common/conn.c -@@ -165,15 +165,15 @@ int qtfs_uds_remote_connect_user(int fd, struct sockaddr __user *addr, int len) - return sysret; - try_conn_remote: - // len is passed from syscall input args directly. it's trustworthy -- if (copy_from_user(&addr_un, addr, len)) { -+ if (len > sizeof(struct sockaddr_un) || copy_from_user(&addr_un, addr, len)) { - qtfs_err("copy sockaddr failed."); - return sysret; - } -+ if (addr_un.sun_family != AF_UNIX) -+ return sysret; - // don't try remote uds connect if sunpath not in whitelist - if (qtfs_uds_remote_whitelist(addr_un.sun_path) != 0) - return sysret; -- if (addr_un.sun_family != AF_UNIX) -- return sysret; - un_headlen = sizeof(struct sockaddr_un) - sizeof(addr_un.sun_path); - if (len < un_headlen || strlen(addr_un.sun_path) >= (sizeof(addr_un.sun_path) - strlen(QTFS_UDS_PROXY_SUFFIX))) { - qtfs_err("failed to try connect remote uds server, sun path:%s too long to add suffix:%s", --- -2.37.1 (Apple Git-137.1) - diff --git a/0012-not-updata-iattr-invalid-data-to-inode.patch b/0012-not-updata-iattr-invalid-data-to-inode.patch deleted file mode 100644 index 8a92054df955a0b457d2ea68e80296a1d9afc65a..0000000000000000000000000000000000000000 --- a/0012-not-updata-iattr-invalid-data-to-inode.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 091ae21631ba7c93ba4673cdd69d199687851864 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Wed, 13 Dec 2023 16:58:22 +0800 -Subject: [PATCH 12/12] not updata iattr invalid data to inode - -Signed-off-by: liqiang ---- - qtfs/CMakeLists.txt | 2 +- - qtfs/qtfs/sb.c | 11 ++++------- - 2 files changed, 5 insertions(+), 8 deletions(-) - -diff --git a/qtfs/CMakeLists.txt b/qtfs/CMakeLists.txt -index 4d0e9e3..5f97eef 100644 ---- a/qtfs/CMakeLists.txt -+++ b/qtfs/CMakeLists.txt -@@ -24,7 +24,7 @@ target_link_libraries(engine PRIVATE glib-2.0 pthread) - target_compile_options(engine PRIVATE "-DQTFS_SERVER") - - if (DEFINED UDS_TEST_MODE OR DEFINED QTFS_TEST_MODE) -- target_compile_options(engine PRIVATE "-DUDS_TEST_MODE") -+ target_compile_options(engine PRIVATE "-DUDS_TEST_MODE" "-DQTFS_TEST_MODE") - target_compile_options(udsproxyd PRIVATE "-DUDS_TEST_MODE") - message(WARNING "Important risk warning: the test mode is turned on, and qtfs will expose the network port, \ - which will bring security risks and is only for testing! If you do not understand the risks,\ -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index 4ecbf50..71aba49 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -1364,13 +1364,10 @@ int qtfs_getattr(const struct path *path, struct kstat *stat, u32 req_mask, unsi - - static void qtfs_copy_iattr_inode(struct inode *inode, struct iattr *attr) - { -- inode->i_mode = attr->ia_mode; -- inode->i_uid = attr->ia_uid; -- inode->i_gid = attr->ia_gid; -- inode->i_size = attr->ia_size; -- inode->i_atime = attr->ia_atime; -- inode->i_mtime = attr->ia_mtime; -- inode->i_ctime = attr->ia_ctime; -+ inode->i_mode = (attr->ia_valid & ATTR_MODE) ? attr->ia_mode : inode->i_mode; -+ inode->i_uid = (attr->ia_valid & ATTR_UID) ? attr->ia_uid : inode->i_uid; -+ inode->i_gid = (attr->ia_valid & ATTR_GID) ? attr->ia_gid : inode->i_gid; -+ inode->i_size = (attr->ia_valid & ATTR_SIZE) ? attr->ia_size : inode->i_size; - } - - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)) --- -2.37.1 (Apple Git-137.1) - diff --git a/0013-bugfix-fifo-suspend-and-fd-leak.patch b/0013-bugfix-fifo-suspend-and-fd-leak.patch deleted file mode 100644 index 60eb9441a9e719af12e5426abf65b9e159bf794c..0000000000000000000000000000000000000000 --- a/0013-bugfix-fifo-suspend-and-fd-leak.patch +++ /dev/null @@ -1,326 +0,0 @@ -From be76eb42524e97f240e7dfca8d3db63df1ca6ed9 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Thu, 14 Dec 2023 21:02:02 +0800 -Subject: [PATCH] bugfix: fifo suspend and fd leak - -Signed-off-by: liqiang ---- - qtfs/qtfs/syscall.c | 1 - - qtfs/qtfs_server/server_fifo.c | 148 ++++++++++++++++++++++----------- - 2 files changed, 99 insertions(+), 50 deletions(-) - -diff --git a/qtfs/qtfs/syscall.c b/qtfs/qtfs/syscall.c -index 61a0de0..e4ee26e 100644 ---- a/qtfs/qtfs/syscall.c -+++ b/qtfs/qtfs/syscall.c -@@ -56,7 +56,6 @@ static inline int qtfs_fstype_judgment(char __user *dir) - return 1; - } - path_put(&path); -- qtfs_info("qtfs fstype judge <%s> is not qtfs.\n", path.dentry->d_iname); - - return 0; - } -diff --git a/qtfs/qtfs_server/server_fifo.c b/qtfs/qtfs_server/server_fifo.c -index 0eaadea..88d3cde 100644 ---- a/qtfs/qtfs_server/server_fifo.c -+++ b/qtfs/qtfs_server/server_fifo.c -@@ -21,7 +21,7 @@ - #include - #include - --int log_switch = 0; -+#define log_switch 0 - #include "req.h" - #include "log.h" - #include "libsocket.h" -@@ -73,11 +73,9 @@ struct fifo_event_t { - /* 触发时的操作函数 */ - int (*handler)(struct fifo_event_t *event); - // 仅在open阻塞状态有效,open完成后应该置空 -- union { -- void *priv; -- int len; // valid read or write len -- int peerfd; // priv fd -- }; -+ void *priv; -+ int len; // valid read or write len -+ int peerfd; // priv fd - unsigned long seq_num; - int block; // block fifo or nonblock - }; -@@ -177,6 +175,18 @@ void fifo_del_event(struct fifo_event_t *evt) - return; - } - -+int fifo_resume_event(struct fifo_event_t *evt, unsigned int events) -+{ -+ struct epoll_event event; -+ event.data.ptr = (void *)evt; -+ event.events = events; -+ if (-1 == epoll_ctl(epollfd, EPOLL_CTL_ADD, evt->fd, &event)) { -+ log_err("epoll ctl add fd:%d event failed, errno:%d.", evt->fd, errno); -+ return -1; -+ } -+ return 0; -+} -+ - void fifo_suspend_event(struct fifo_event_t *evt) - { - struct epoll_event event; -@@ -184,7 +194,6 @@ void fifo_suspend_event(struct fifo_event_t *evt) - if (epoll_ctl(epollfd, EPOLL_CTL_DEL, evt->fd, &event) == -1) { - log_err("suspend event fd:%d failed, errno:%d", evt->fd, errno); - } -- free(evt); - return; - } - -@@ -203,7 +212,7 @@ static int fifo_del_peer(int flag, struct fifo_event_t *me) - memset(fifo_peer_evt, 0, sizeof(struct fifo_event_t *) * EPOLL_MAX_EVENT_NUMS); - break; - case FIFO_PEER_ADD: -- fifo_peer_evt[fifo_peer_index] = me->peerevt; -+ fifo_peer_evt[fifo_peer_index++] = me->peerevt; - break; - case FIFO_PEER_POST: - for (int i = 0; i < fifo_peer_index; i++) { -@@ -260,13 +269,15 @@ static void fifo_proc_ack(struct fifo_event_t *evt, int type, int sockfd, char * - - int fifo_proc_unknown(struct fifo_event_t *evt) - { -- struct open_arg_t *oarg; -+ struct open_arg_t *oarg = (struct open_arg_t *)evt->priv; - log_info("unknown read/write event fd:%d happend, open event not complete!", evt->fd); - // 这不是预期的事件,直接删除此事件,且关联删除open线程 - pthread_mutex_lock(&fifomutex); -+ // 如果priv为空表示open thread已退出 - if (evt->priv) { -- oarg = (struct open_arg_t *)evt->priv; -+ // 如果priv非空,则open thread还在阻塞状态,先杀死线程,然后释放资源,置空priv。 - pthread_cancel(*oarg->t); -+ oarg = (struct open_arg_t *)evt->priv; - free(oarg->t); - free(oarg->req); - free(oarg); -@@ -323,7 +334,10 @@ int fifo_proc_readable(struct fifo_event_t *evt) - - log_info("readable event fd:%d peerfd:%d, errno:%d", evt->fd, evt->peerevt->fd, errno); - free(msg); -- evt->peerevt->peerevt = NULL; -+ // 挂起readable任务,恢复监听网络请求 -+ if (fifo_resume_event(evt->peerevt, EPOLLIN|EPOLLHUP) == -1) { -+ goto err_ack; -+ } - // 读完立即删除本监听,如果继续读后面再添加进来 - return FIFO_RET_SUSPEND; - -@@ -334,7 +348,8 @@ err_ack: - errrsp.len = 0; - fifo_proc_ack(evt, QTFS_REQ_READITER, evt->peerevt->fd, (char *)&errrsp, sizeof(errrsp)); - } while (0); -- evt->peerevt->peerevt = NULL; -+ if (fifo_resume_event(evt->peerevt, EPOLLIN|EPOLLHUP) == -1) -+ return FIFO_RET_DEL_BOTH; - return error_ret; - } - -@@ -380,7 +395,10 @@ int fifo_proc_writeable(struct fifo_event_t *evt) - - log_info("writeable event fd:%d peerfd:%d, writelen:%lu, errno:%d", evt->fd, evt->peerevt->fd, rsp.len, errno); - free(msg); -- evt->peerevt->peerevt = NULL; -+ // 挂起写fifo任务,重启监听网络请求任务 -+ if (fifo_resume_event(evt->peerevt, EPOLLIN) == -1) { -+ goto err_ack; -+ } - return FIFO_RET_SUSPEND; - - err_ack: -@@ -390,6 +408,8 @@ err_ack: - errrsp.len = 0; - fifo_proc_ack(evt, QTFS_REQ_WRITE, evt->peerevt->fd, (char *)&errrsp, sizeof(errrsp)); - } while (0); -+ if (fifo_resume_event(evt->peerevt, EPOLLIN|EPOLLHUP) == -1) -+ return FIFO_RET_DEL_BOTH; - return error_ret; - } - -@@ -402,9 +422,10 @@ int fifo_proc_read_req(struct fifo_event_t *evt) - ret = fifo_recv_with_timeout(evt->fd, (char *)&req, sizeof(req)); - if (ret <= 0) { - log_err("recv fifo read head failed, errno:%d.", errno); -- // 主线程是串行的,peerevt如果是空,则没有readable监听,直接close peerfd即可 -+ // 链接提前被中断了,有可能还没有peerevt,就直接关掉fd - if (evt->peerevt == NULL) { -- close(evt->peerfd); -+ if (evt->peerfd != 0) -+ close(evt->peerfd); - return FIFO_RET_DEL; - } - // 如果peerevt非空则要同时删除peer事件 -@@ -422,16 +443,31 @@ int fifo_proc_read_req(struct fifo_event_t *evt) - } - - // if fifo is block, dont block on main thread -- struct fifo_event_t *newevt = fifo_add_event(evt->peerfd, evt, fifo_proc_readable, NULL, EPOLLIN); -- if (newevt == NULL) { -- log_err("add readable event failed, fd:%d socketfd:%d", evt->peerfd, evt->fd); -- return FIFO_RET_ERR; -+ if (evt->peerevt == NULL) { -+ struct fifo_event_t *newevt = fifo_add_event(evt->peerfd, evt, fifo_proc_readable, NULL, EPOLLIN); -+ if (newevt == NULL) { -+ log_err("add readable event failed, fd:%d socketfd:%d", evt->peerfd, evt->fd); -+ goto early_ack; -+ } -+ evt->peerevt = newevt; -+ newevt->len = req.len; -+ newevt->seq_num = evt->seq_num; -+ } else { -+ evt->peerevt->seq_num = evt->seq_num; -+ evt->peerevt->len = req.len; -+ if (fifo_resume_event(evt->peerevt, EPOLLIN) == -1) -+ goto early_ack; - } -- evt->peerevt = newevt; -- newevt->len = req.len; -- newevt->seq_num = evt->seq_num; -+ return FIFO_RET_SUSPEND; - -- return FIFO_RET_OK; -+early_ack: -+ do { -+ struct qtrsp_fifo_read rsp; -+ rsp.err = -EFAULT; -+ rsp.len = 0; -+ fifo_proc_ack(evt, QTFS_REQ_READITER, evt->fd, (char *)&rsp, sizeof(rsp)); -+ } while (0); -+ return FIFO_RET_DEL_BOTH; - } - - // 写 -@@ -442,9 +478,10 @@ int fifo_proc_write_req(struct fifo_event_t *evt) - ret = fifo_recv_with_timeout(evt->fd, (char *)&req, sizeof(req)); - if (ret <= 0) { - log_err("recv fifo write head failed, errno:%d.", errno); -- // 主线程是串行的,peerevt如果是空,则没有readable监听,直接close peerfd即可 -+ // 链接提前被中断了,有可能还没有peerevt,就直接关掉fd - if (evt->peerevt == NULL) { -- close(evt->peerfd); -+ if (evt->peerfd != 0) -+ close(evt->peerfd); - return FIFO_RET_DEL; - } - // 如果peerevt非空则要同时删除peer事件 -@@ -461,16 +498,34 @@ int fifo_proc_write_req(struct fifo_event_t *evt) - return FIFO_RET_OK; - } - // if fifo is block, dont block on main thread -- struct fifo_event_t *newevt = fifo_add_event(evt->peerfd, evt, fifo_proc_writeable, NULL, EPOLLOUT); -- if (newevt == NULL) { -- log_err("add writeable event failed, fd:%d socketfd:%d", evt->peerfd, evt->fd); -- return FIFO_RET_ERR; -+ if (evt->peerevt == NULL) { -+ struct fifo_event_t *newevt = fifo_add_event(evt->peerfd, evt, fifo_proc_writeable, NULL, EPOLLOUT); -+ if (newevt == NULL) { -+ log_err("add writeable event failed, fd:%d socketfd:%d", evt->peerfd, evt->fd); -+ goto early_ack; -+ } -+ newevt->len = req.len; -+ newevt->seq_num = evt->seq_num; -+ evt->peerevt = newevt; -+ } else { -+ evt->peerevt->seq_num = evt->seq_num; -+ evt->peerevt->len = req.len; -+ if (fifo_resume_event(evt->peerevt, EPOLLOUT) == -1) { -+ goto early_ack; -+ } - } -- evt->peerevt = newevt; -- newevt->len = req.len; -- newevt->seq_num = evt->seq_num; - -- return FIFO_RET_OK; -+ // 此时tcp fd需要切换为writeable状态,不能同时用,将本任务挂起不再监听,writeable完事再切回来 -+ return FIFO_RET_SUSPEND; -+early_ack: -+ do { -+ struct qtrsp_fifo_write rsp; -+ rsp.err = -EFAULT; -+ rsp.len = 0; -+ fifo_proc_ack(evt, QTFS_REQ_WRITE, evt->fd, (char *)&rsp, sizeof(rsp)); -+ } while (0); -+ return FIFO_RET_DEL_BOTH; -+ - } - - // read/write/close req -@@ -481,11 +536,6 @@ int fifo_proc_new_req(struct fifo_event_t *evt) - ret = fifo_recv_with_timeout(evt->fd, (char *)&head, sizeof(struct qtreq)); - if (ret <= 0) { - log_err("recv qtreq head failed, errno:%d.", errno); -- // 主线程是串行的,peerevt如果是空,则没有readable监听,直接close peerfd即可 -- if (evt->peerevt == NULL) { -- close(evt->peerfd); -- return FIFO_RET_DEL; -- } - // 如果peerevt非空则要同时删除peer事件 - return FIFO_RET_DEL_BOTH; - } -@@ -522,7 +572,8 @@ int fifo_proc_new_req(struct fifo_event_t *evt) - void *fifo_open_thread(void *arg) - { - int fd; -- struct open_arg_t *oarg = (struct open_arg_t *)arg; -+ struct fifo_event_t *evt = (struct fifo_event_t *)arg; -+ struct open_arg_t *oarg = (struct open_arg_t *)evt->priv; - int rw; - int err = 0; - struct fifo_event_t *newevt; -@@ -540,15 +591,13 @@ void *fifo_open_thread(void *arg) - // 代理不应该主动,只监听挂断事件,在通信对端发来read/write消息才 - // 改为监听可读/可写状态并进行实际读写。 - pthread_mutex_lock(&fifomutex); -- if (rw == FIFO_READ) { -- oarg->main_evt->peerevt = NULL; -- oarg->main_evt->peerfd = fd; -- oarg->main_evt->handler = fifo_proc_new_req; -- } else { -- oarg->main_evt->peerevt = NULL; -- oarg->main_evt->handler = fifo_proc_new_req; -- oarg->main_evt->peerfd = fd; -+ if (evt->priv == NULL) { -+ log_err("fatal error, oarg is invalid."); -+ goto end; - } -+ oarg->main_evt->peerevt = NULL; -+ oarg->main_evt->handler = fifo_proc_new_req; -+ oarg->main_evt->peerfd = fd; - oarg->main_evt->block = fifo_block_flags(oarg->req->flags); - - rsp.fd = fd; -@@ -565,6 +614,7 @@ end: - free(oarg->t); - free(oarg->req); - free(oarg); -+ evt->priv = NULL; - pthread_mutex_unlock(&fifomutex); - return NULL; - } -@@ -624,11 +674,11 @@ int fifo_proc_open_req(struct fifo_event_t *evt) - free(oarg); - return FIFO_RET_ERR; - } -- pthread_create(t, &attr, fifo_open_thread, oarg); -+ evt->priv = oarg; - oarg->t = t; -+ pthread_create(t, &attr, fifo_open_thread, evt); - - // 临时状态机,暂时不知道是读是写 -- evt->priv = oarg; - evt->handler = fifo_proc_unknown; - - log_info("Start new fifo open thread head:%u, len:%d", head.type, head.len); --- -2.37.1 (Apple Git-137.1) - diff --git a/0014-fix-event-misalignment-caused-by-multi-thread-schedu.patch b/0014-fix-event-misalignment-caused-by-multi-thread-schedu.patch deleted file mode 100644 index 93c338714a6e97e4b6ad1794621a2dc77e94ed27..0000000000000000000000000000000000000000 --- a/0014-fix-event-misalignment-caused-by-multi-thread-schedu.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 6484415ecbd4062c49a2c4b8d421a9fc9dd4250a Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Sat, 16 Dec 2023 11:22:21 +0800 -Subject: [PATCH] fix event misalignment caused by multi-thread scheduling - -Signed-off-by: liqiang ---- - qtfs/qtfs_server/server_fifo.c | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/qtfs/qtfs_server/server_fifo.c b/qtfs/qtfs_server/server_fifo.c -index 88d3cde..1839a88 100644 ---- a/qtfs/qtfs_server/server_fifo.c -+++ b/qtfs/qtfs_server/server_fifo.c -@@ -676,10 +676,9 @@ int fifo_proc_open_req(struct fifo_event_t *evt) - } - evt->priv = oarg; - oarg->t = t; -- pthread_create(t, &attr, fifo_open_thread, evt); -- - // 临时状态机,暂时不知道是读是写 - evt->handler = fifo_proc_unknown; -+ pthread_create(t, &attr, fifo_open_thread, evt); - - log_info("Start new fifo open thread head:%u, len:%d", head.type, head.len); - return FIFO_RET_OK; --- -2.37.1 (Apple Git-137.1) - diff --git a/0015-fix-read-write-fifo-failed-problem-and-update-rexec-.patch b/0015-fix-read-write-fifo-failed-problem-and-update-rexec-.patch deleted file mode 100644 index 105cd35c80f5bb2528928bf370380f0d79ee6b35..0000000000000000000000000000000000000000 --- a/0015-fix-read-write-fifo-failed-problem-and-update-rexec-.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 402c5c17885db59b15ed06c1f1bf92f2378b6f90 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Sat, 16 Dec 2023 16:26:28 +0800 -Subject: [PATCH] fix read/write fifo failed problem and update rexec whitelist - descriptor in readme - -Signed-off-by: liqiang ---- - qtfs/README.md | 8 ++++---- - qtfs/qtfs_server/server_fifo.c | 6 ++---- - 2 files changed, 6 insertions(+), 8 deletions(-) - -diff --git a/qtfs/README.md b/qtfs/README.md -index 3721f44..2ffdce6 100644 ---- a/qtfs/README.md -+++ b/qtfs/README.md -@@ -134,13 +134,13 @@ Tips:若完成测试环境的配置后,无法通过客户端访问所挂载 - - 1. rexec工具依赖上述udsproxyd服务,使用udsproxyd提供的uds协同进行通信,请确认udsproxyd正常启动。 - --2. 配置白名单,将qtfs/config/rexec/whitelist文件拷贝至/etc/rexec/下,请手动配置需要的白名单选项,在其中增加允许执行的二进制命令。 -+2. 为rexec_server配置白名单,将qtfs/config/rexec/whitelist文件拷贝至/etc/rexec/下,请手动配置需要的白名单选项,在其中增加允许执行的二进制命令,请注意该白名单应该配置在rexec_server运行的系统上,如果双向运行,则两侧都需要配置,rexec_server服务只接受该白名单列出的二进制拉起执行,不在白名单中的请求会被rexec_server拒绝拉起。 - --3. 在udsconnect中增加rexec通信socket所在目录白名单,增加方式有两种: -+3. 为rexec端配置uds白名单(这个白名单只在需要调用rexec二进制的系统中配置,如果是双向则都配置),在udsconnect中增加rexec通信socket所在目录白名单,增加方式有两种: - -- 1. 在/etc/qtfs/whitelist的`[udsconnect]`表项中增加`/var/run/rexec`,修改后需要重新部署qtfs使其生效。 -+ 1. 在qtfs_server端可以将/etc/qtfs/whitelist的`[udsconnect]`表项中增加`/var/run/rexec`,修改后需要重新启动engine进程使其生效。 - -- 2. 进入源码目录`qtinfo/`,执行`make`编译得到二进制。使用qtcfg进行配置:`qtcfg -w udsconnect -x /var/run/rexec`,配置完成后可通过`qtcfg -w udsconnect -z`查询是否生效 -+ 2. 使用前述的qtcfg进行配置:`qtcfg -w udsconnect -x /var/run/rexec`,配置完成后可通过`qtcfg -w udsconnect -z`查询是否生效。qtcfg可以在qtfs client或者server端动态添加白名单,qtfs server端应该在engine拉起后执行。 - - 4. 拉起rexec_server作为服务端,无需参数 - -diff --git a/qtfs/qtfs_server/server_fifo.c b/qtfs/qtfs_server/server_fifo.c -index 1839a88..7e4320e 100644 ---- a/qtfs/qtfs_server/server_fifo.c -+++ b/qtfs/qtfs_server/server_fifo.c -@@ -324,8 +324,7 @@ int fifo_proc_readable(struct fifo_event_t *evt) - log_err("read from fifo:%d failed, readlen:%d, errno:%d", evt->fd, readlen, errno); - ret = errno; - free(msg); -- if (errno == EPIPE) -- error_ret = FIFO_RET_DEL_BOTH; -+ error_ret = FIFO_RET_DEL_BOTH; - goto err_ack; - } - rsp->err = 0; -@@ -385,8 +384,7 @@ int fifo_proc_writeable(struct fifo_event_t *evt) - log_err("write to fifo failed, ret:%d errno:%d", ret, errno); - ret = errno; - free(msg); -- if (errno == EPIPE) -- error_ret = FIFO_RET_DEL_BOTH; -+ error_ret = FIFO_RET_DEL_BOTH; - goto err_ack; - } - rsp.err = 0; --- -2.37.1 (Apple Git-137.1) - diff --git a/0016-fix-fifo-early-exit-problem.patch b/0016-fix-fifo-early-exit-problem.patch deleted file mode 100644 index 9703281769672ddccb3a9b82a7a116a096395512..0000000000000000000000000000000000000000 --- a/0016-fix-fifo-early-exit-problem.patch +++ /dev/null @@ -1,37 +0,0 @@ -From fafc4caa3fd73e1e375410e1fbd3e3078761931b Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Mon, 18 Dec 2023 15:10:04 +0800 -Subject: [PATCH 3/6] fix fifo early exit problem - -Signed-off-by: liqiang ---- - qtfs/qtfs_server/server_fifo.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/qtfs/qtfs_server/server_fifo.c b/qtfs/qtfs_server/server_fifo.c -index 7e4320e..1839a88 100644 ---- a/qtfs/qtfs_server/server_fifo.c -+++ b/qtfs/qtfs_server/server_fifo.c -@@ -324,7 +324,8 @@ int fifo_proc_readable(struct fifo_event_t *evt) - log_err("read from fifo:%d failed, readlen:%d, errno:%d", evt->fd, readlen, errno); - ret = errno; - free(msg); -- error_ret = FIFO_RET_DEL_BOTH; -+ if (errno == EPIPE) -+ error_ret = FIFO_RET_DEL_BOTH; - goto err_ack; - } - rsp->err = 0; -@@ -384,7 +385,8 @@ int fifo_proc_writeable(struct fifo_event_t *evt) - log_err("write to fifo failed, ret:%d errno:%d", ret, errno); - ret = errno; - free(msg); -- error_ret = FIFO_RET_DEL_BOTH; -+ if (errno == EPIPE) -+ error_ret = FIFO_RET_DEL_BOTH; - goto err_ack; - } - rsp.err = 0; --- -2.37.1 (Apple Git-137.1) - diff --git a/0017-update-some-problem-in-libvirt-readme.patch b/0017-update-some-problem-in-libvirt-readme.patch deleted file mode 100644 index 4defed3261b32d7ebfaea377a9ebdd5ebce17c70..0000000000000000000000000000000000000000 --- a/0017-update-some-problem-in-libvirt-readme.patch +++ /dev/null @@ -1,46 +0,0 @@ -From b3a943ee226470e2f7ba61b1d7ce5c86b56e001a Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Mon, 18 Dec 2023 17:23:54 +0800 -Subject: [PATCH 4/6] update some problem in libvirt readme - -Signed-off-by: liqiang ---- - ...344\273\216\351\233\266\346\220\255\345\273\272v1.1.md" | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git "a/usecases/libvirtd-offload/libvirt\347\233\264\350\277\236\350\201\232\345\220\210\347\216\257\345\242\203\344\273\216\351\233\266\346\220\255\345\273\272v1.1.md" "b/usecases/libvirtd-offload/libvirt\347\233\264\350\277\236\350\201\232\345\220\210\347\216\257\345\242\203\344\273\216\351\233\266\346\220\255\345\273\272v1.1.md" -index bc47c50..07dbcb4 100644 ---- "a/usecases/libvirtd-offload/libvirt\347\233\264\350\277\236\350\201\232\345\220\210\347\216\257\345\242\203\344\273\216\351\233\266\346\220\255\345\273\272v1.1.md" -+++ "b/usecases/libvirtd-offload/libvirt\347\233\264\350\277\236\350\201\232\345\220\210\347\216\257\345\242\203\344\273\216\351\233\266\346\220\255\345\273\272v1.1.md" -@@ -99,9 +99,9 @@ make install - make role=server - make install - ``` --配置工具将会自动安装,然后使用qtcfg命令配置白名单,假设需要增加的白名单为"/var/lib/libvirt/",输入: -+配置工具将会自动安装,然后使用qtcfg命令配置白名单,假设需要增加的白名单为"/var/lib/libvirt",输入: - ``` --qtcfg -x /var/lib/libvirt/ -+qtcfg -w udsconnect -x /var/lib/libvirt - ``` - 查询白名单为: - ``` -@@ -133,7 +133,6 @@ rexec是一个用c语言开发的远程执行组件,分为rexec client和rexec - ``` - chmod 400 /etc/rexec/whitelist。 - ``` --如果想仅用于测试,可以不进行白名单配置,删除此文件重启rexec_server进程后则没有白名单限制。 - - 下载dpu-utilities代码后,进入qtfs/rexec主目录下,执行:`make && make install`即可安装rexec所需全部二进制到/usr/bin目录下,包括了:`rexec、rexec_server`两个二进制可执行文件。 - -@@ -263,7 +262,7 @@ libvirtd -d - qtcfg -z - ``` - --查看列举出来的白名单是否包含"/var/lib/libvirt/" -+查看列举出来的白名单是否包含"/var/lib/libvirt"和"/var/run/rexec"。 - - ## **3.5** 拉起虚机 - --- -2.37.1 (Apple Git-137.1) - diff --git a/0018-fix-return-exit-status-bug-in-rexec.patch b/0018-fix-return-exit-status-bug-in-rexec.patch deleted file mode 100644 index 078e8820be79c59943e0bddbcb92828f8493a2c2..0000000000000000000000000000000000000000 --- a/0018-fix-return-exit-status-bug-in-rexec.patch +++ /dev/null @@ -1,66 +0,0 @@ -From a3f2eaf718eebb05d4b2d350833e1416d1c4a2f6 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Tue, 19 Dec 2023 20:06:07 +0800 -Subject: [PATCH 5/6] fix return exit status bug in rexec - -Signed-off-by: liqiang ---- - qtfs/rexec/rexec.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/qtfs/rexec/rexec.c b/qtfs/rexec/rexec.c -index f905cfa..eb8b9bd 100644 ---- a/qtfs/rexec/rexec.c -+++ b/qtfs/rexec/rexec.c -@@ -51,6 +51,7 @@ struct rexec_thread_arg { - int efd; - int connfd; - char **argv; -+ int exit_status; - }; - - struct rexec_global_var g_rexec; -@@ -311,7 +312,7 @@ static int rexec_run(int efd, int connfd, char *argv[]) - - rexec_log("Rexec process start run, as proxy of remote %s", argv[1]); - rexec_event_run(efd); -- rexec_log("Rexec process %s exit.", argv[1]); -+ rexec_log("Rexec process %s exit status:%d.", argv[1], exit_status); - - // clear pidmap file - if (pidfd > 0) { -@@ -687,9 +688,9 @@ static void *rexec_pipe_proxy_thread(void *arg) - static void *rexec_conn_thread(void *arg) - { - struct rexec_thread_arg *parg = (struct rexec_thread_arg *)arg; -- int exit_status = rexec_run(parg->efd, parg->connfd, parg->argv); -+ parg->exit_status = rexec_run(parg->efd, parg->connfd, parg->argv); - -- pthread_exit((void *)&exit_status); -+ pthread_exit((void *)NULL); - } - - static void rexec_global_var_init() -@@ -757,7 +758,6 @@ int main(int argc, char *argv[]) - pthread_t thrd_conn; - struct rexec_thread_arg targ; - struct rexec_thread_arg connarg; -- void *exit_status; - targ.efd = pipeefd; - (void)pthread_create(&thrd, NULL, rexec_pipe_proxy_thread, &targ); - -@@ -765,9 +765,9 @@ int main(int argc, char *argv[]) - connarg.connfd = connfd; - connarg.argv = argv; - (void)pthread_create(&thrd_conn, NULL, rexec_conn_thread, &connarg); -- pthread_join(thrd_conn, (void **)&exit_status); -+ pthread_join(thrd_conn, NULL); - fclose(rexec_logfile); -- exit(*(int *)exit_status); -+ exit(connarg.exit_status); - err_end: - fclose(rexec_logfile); - rexec_logfile = NULL; --- -2.37.1 (Apple Git-137.1) - diff --git a/0019-fix-bug-in-get-link.patch b/0019-fix-bug-in-get-link.patch deleted file mode 100644 index f3292c717583ae4e41cdbcc710cfdf8fd91fb764..0000000000000000000000000000000000000000 --- a/0019-fix-bug-in-get-link.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 7346bdff4366b2ea41714341bb7ed0dc0d3f4426 Mon Sep 17 00:00:00 2001 -From: liqiang -Date: Wed, 20 Dec 2023 16:33:17 +0800 -Subject: [PATCH 6/6] fix bug in get link - -Signed-off-by: liqiang ---- - qtfs/qtfs/sb.c | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c -index 71aba49..77ff15b 100644 ---- a/qtfs/qtfs/sb.c -+++ b/qtfs/qtfs/sb.c -@@ -1453,10 +1453,7 @@ const char *qtfs_getlink(struct dentry *dentry, - qtfs_conn_put_param(pvar); - return ERR_PTR(-ENOENT); - } -- if (fsinfo->mnt_path) -- len = strlen(fsinfo->mnt_path) + strlen(rsp->path) + 1; -- else -- len = strlen(rsp->path) + 1; -+ len = strlen(rsp->path) + 1; - if (len > MAX_PATH_LEN || len == 0) { - qtfs_err("qtfs getlink failed. path name too long:%s - %s\n", fsinfo->mnt_path, rsp->path); - qtfs_conn_put_param(pvar); -@@ -1468,8 +1465,6 @@ const char *qtfs_getlink(struct dentry *dentry, - return ERR_PTR(-ENOMEM); - } - memset(link, 0, len); -- if (rsp->path[0] == '/' && fsinfo->mnt_path) -- strcat(link, fsinfo->mnt_path); - strcat(link, rsp->path); - qtfs_info("get link success <%s>\n", link); - --- -2.37.1 (Apple Git-137.1) - diff --git a/dpu-utilities.spec b/dpu-utilities.spec index 42c9b374562d3e0f945aabc631866ed107465068..ae9baeb1793d0e5f68bbcc7857ed315b60bff528 100644 --- a/dpu-utilities.spec +++ b/dpu-utilities.spec @@ -1,7 +1,7 @@ Name: dpu-utilities Summary: openEuler dpu utilities -Version: 1.6 -Release: 7 +Version: 1.10 +Release: 1 License: GPL-2.0 Source: https://gitee.com/openeuler/dpu-utilities/repository/archive/v%{version}.tar.gz ExclusiveOS: linux @@ -13,26 +13,6 @@ Provides: %{name} = %{version}-%{release} %define kernel_version %(ver=`rpm -qa|grep kernel-devel`;echo ${ver#*kernel-devel-}) BuildRequires: kernel-devel >= 5.10, gcc, make, json-c-devel, glib2-devel -Patch1: 0001-fix-suspend-in-fifo-the-reason-is-SIGURG-recieved-in.patch -Patch2: 0002-fix-virsh-console-problem.patch -Patch3: 0003-delete-write-path-buf-to-log-info.patch -Patch4: 0004-fix-rexec-exit-code-bug-and-fix-some-warning.patch -Patch5: 0005-add-cmake-to-adapt-server-fifo.patch -Patch6: 0006-code-style-problem-fix.patch -Patch7: 0007-do-not-output-addr-in-kernel.patch -Patch8: 0008-fix-coredump-run-binary-after-copy-in-client.patch -Patch9: 0009-get-mount-pointer-error-when-remote-mount-path-is-sa.patch -Patch10: 0010-bugfix-unix-socket-connection-refuse-after-chmod-mod.patch -Patch11: 0011-filter-af-unix-before-whitelist-check.patch -Patch12: 0012-not-updata-iattr-invalid-data-to-inode.patch -Patch13: 0013-bugfix-fifo-suspend-and-fd-leak.patch -Patch14: 0014-fix-event-misalignment-caused-by-multi-thread-schedu.patch -Patch15: 0015-fix-read-write-fifo-failed-problem-and-update-rexec-.patch -Patch16: 0016-fix-fifo-early-exit-problem.patch -Patch17: 0017-update-some-problem-in-libvirt-readme.patch -Patch18: 0018-fix-return-exit-status-bug-in-rexec.patch -Patch19: 0019-fix-bug-in-get-link.patch - %description This package contains the software utilities on dpu. @@ -159,6 +139,9 @@ sed -i '/# product cut_conf/a\dpuos kiwi/minios/cfg_dpuos yes' /opt/imageT sed -i '//a\dpuos 1 rpm-dir euler_base' /opt/imageTailor/repos/RepositoryRule.conf %changelog +* Fri May 24 2024 liqiang 1.10-1 +- Update to v1.10 for some features and bugfix + * Tue Dec 26 2023 liqiang 1.6-7 - Update recent bugfixes diff --git a/v1.6.tar.gz b/v1.10.tar.gz similarity index 31% rename from v1.6.tar.gz rename to v1.10.tar.gz index 1e6cbf04269db974c644cdf9609a1fbb903b04f4..e9206b8d29b63a8390a605c108fdebb7fb15ee12 100644 Binary files a/v1.6.tar.gz and b/v1.10.tar.gz differ