From e7325a331bdf173f2f86ce73d8c4637684fda975 Mon Sep 17 00:00:00 2001 From: liqiang Date: Fri, 24 May 2024 15:11:18 +0800 Subject: [PATCH] Update to v1.10 for some features and bugfix Signed-off-by: liqiang --- ...ifo-the-reason-is-SIGURG-recieved-in.patch | 308 ---------- 0002-fix-virsh-console-problem.patch | 150 ----- 0003-delete-write-path-buf-to-log-info.patch | 32 -- ...c-exit-code-bug-and-fix-some-warning.patch | 115 ---- 0005-add-cmake-to-adapt-server-fifo.patch | 28 - 0006-code-style-problem-fix.patch | 534 ------------------ 0007-do-not-output-addr-in-kernel.patch | 27 - ...dump-run-binary-after-copy-in-client.patch | 37 -- ...r-error-when-remote-mount-path-is-sa.patch | 27 - ...et-connection-refuse-after-chmod-mod.patch | 114 ---- ...ilter-af-unix-before-whitelist-check.patch | 36 -- ...t-updata-iattr-invalid-data-to-inode.patch | 49 -- 0013-bugfix-fifo-suspend-and-fd-leak.patch | 326 ----------- ...gnment-caused-by-multi-thread-schedu.patch | 29 - ...ifo-failed-problem-and-update-rexec-.patch | 61 -- 0016-fix-fifo-early-exit-problem.patch | 37 -- ...pdate-some-problem-in-libvirt-readme.patch | 46 -- ...-fix-return-exit-status-bug-in-rexec.patch | 66 --- 0019-fix-bug-in-get-link.patch | 38 -- dpu-utilities.spec | 27 +- v1.6.tar.gz => v1.10.tar.gz | Bin 854780 -> 849001 bytes 21 files changed, 5 insertions(+), 2082 deletions(-) delete mode 100644 0001-fix-suspend-in-fifo-the-reason-is-SIGURG-recieved-in.patch delete mode 100644 0002-fix-virsh-console-problem.patch delete mode 100644 0003-delete-write-path-buf-to-log-info.patch delete mode 100644 0004-fix-rexec-exit-code-bug-and-fix-some-warning.patch delete mode 100644 0005-add-cmake-to-adapt-server-fifo.patch delete mode 100644 0006-code-style-problem-fix.patch delete mode 100644 0007-do-not-output-addr-in-kernel.patch delete mode 100644 0008-fix-coredump-run-binary-after-copy-in-client.patch delete mode 100644 0009-get-mount-pointer-error-when-remote-mount-path-is-sa.patch delete mode 100644 0010-bugfix-unix-socket-connection-refuse-after-chmod-mod.patch delete mode 100644 0011-filter-af-unix-before-whitelist-check.patch delete mode 100644 0012-not-updata-iattr-invalid-data-to-inode.patch delete mode 100644 0013-bugfix-fifo-suspend-and-fd-leak.patch delete mode 100644 0014-fix-event-misalignment-caused-by-multi-thread-schedu.patch delete mode 100644 0015-fix-read-write-fifo-failed-problem-and-update-rexec-.patch delete mode 100644 0016-fix-fifo-early-exit-problem.patch delete mode 100644 0017-update-some-problem-in-libvirt-readme.patch delete mode 100644 0018-fix-return-exit-status-bug-in-rexec.patch delete mode 100644 0019-fix-bug-in-get-link.patch rename v1.6.tar.gz => v1.10.tar.gz (31%) 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 fcb4ade..0000000 --- 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 0747e38..0000000 --- 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 d563513..0000000 --- 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 6e2dd25..0000000 --- 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 681268d..0000000 --- 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 a75be7c..0000000 --- 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 d8a8d78..0000000 --- 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 9838c0d..0000000 --- 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 99d01bd..0000000 --- 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 7fdb918..0000000 --- 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 8b38b39..0000000 --- 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 8a92054..0000000 --- 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 60eb944..0000000 --- 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 93c3387..0000000 --- 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 105cd35..0000000 --- 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 9703281..0000000 --- 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 4defed3..0000000 --- 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 078e882..0000000 --- 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 f3292c7..0000000 --- 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 42c9b37..ae9baeb 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 GIT binary patch delta 635920 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