liudf0716 / xfrpc

The xfrpc project is a lightweight implementation of the FRP client written in C language for OpenWRT and IoT systems. It is designed to provide an efficient solution for resource-constrained devices such as OpenWRT routers and IoT devices, which often have limited ROM and RAM space.
GNU General Public License v3.0
712 stars 89 forks source link

Risk of segment errors at start_work_conn_resp_unmarshal function #49

Closed mumianbaba closed 10 months ago

mumianbaba commented 10 months ago

我使用的是2.9.644版本的xfrpc。 start_work_conn_resp_unmarshal函数内部,在proxy_name解析失败时,仍然返回sr有效指针,此时sr->proxy_name为NULL。接下来struct proxy_service *ps = get_proxy_service(sr->proxy_name);代码处直接使用sr->proxy_name变量,发生段错误。 上述是我真实发生段错误后,追踪到的路径。可以查看一下代码。

下面是我添加打印后的日志: 注释 get_proxy_service(sr->proxy_name);,后的打印日志。 [7][Wed Oct 25 14:39:28 2023]23385 I AM HERE!! [7][Wed Oct 25 14:39:28 2023]23385 I AM HERE!! [3][Wed Oct 25 14:39:28 2023]23385 TypeStartWorkConn requested proxy service [NULL] not found, it should nerver be happend! [7][Wed Oct 25 14:39:28 2023]23385 I AM HERE!! [7][Wed Oct 25 14:39:28 2023]23385 main control message

在start_work_conn_resp_unmarshal内部添加打印,并修改逻辑后的打印。 [7][Wed Oct 25 14:48:30 2023]6206 start work conn resp unmarshal msg:{"error":"token in NewWorkConn doesn't match token from configuration"} [3][Wed Oct 25 14:48:30 2023]6206 start work conn resp unmarshal msg proxy_name NULL, {"error":"token in NewWorkConn doesn't match token from configuration"} [3][Wed Oct 25 14:48:30 2023]6206 TypeStartWorkConn unmarshal failed, it should never be happend!

mumianbaba commented 10 months ago

xfrpc不支持authenticate_new_work_conns = true特性,外加xfrpc处理逻辑问题导致段错误。可以修改处理逻辑后,无论服务器是否开启该特性,xfrpc不会出现段错误。服务器开启该功能后,xfrpc的代理工作就不能正常进行,不开启能正常提供代理服务。

liudf0716 commented 10 months ago

@mumianbaba 非常感谢指出具体的错误,我看看代码,尽快修复,如果可以,你能提交PR修复这个问题吗?

liudf0716 commented 10 months ago

@mumianbaba fix it https://github.com/liudf0716/xfrpc/pull/51