refactor(mount): use memfd instead of pipe for password transfer#298
Conversation
Replace pipe-based password transmission with memfd_create for better security and efficiency. Remove Qt5 compatibility code including base64 encoding/decoding logic. 使用 memfd_create 替代管道传递密码,提升安全性和效率。 移除 Qt5 兼容代码,包括 base64 编解码逻辑。 Log: 使用memfd替代管道传递网络挂载密码,移除Qt5兼容代码 PMS: https://pms.uniontech.com/task-view-389921.html Influence: 所有网络挂载密码传输方式从管道改为内存文件描述符,不再支持Qt5版本。
deepin pr auto review这份 Git Diff 主要对
整体来看,使用 以下是详细的审查意见: 1. 代码安全严重问题:内存中可能残留敏感信息(密码明文)
2. 语法逻辑潜在问题:
逻辑一致性问题:
3. 代码性能合理改进:移除 Base64 编解码 4. 代码质量问题 1:缺少
问题 2:错误日志不够详细
改进后的代码示例综合以上意见, // 确保在文件顶部或 CMake 中定义了 _GNU_SOURCE
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <sys/mman.h>
// ... 其他头文件
static QVariant preparePasswd(const QString &passwd)
{
if (passwd.isEmpty()) {
return QVariant("");
}
int fd = memfd_create("DBusFD", MFD_CLOEXEC);
if (fd < 0) {
// 增加错误原因输出,并考虑兼容性回退
qCritical() << "Failed to create memfd for data transfer:" << strerror(errno);
return QVariant("");
}
QByteArray byteData = passwd.toUtf8();
ssize_t written = ::write(fd, byteData.constData(), byteData.size());
// 安全性改进:写入后擦除 QByteArray 中的敏感数据
byteData.fill('\0');
if (written < 0 || static_cast<ssize_t>(byteData.size()) != written) {
qCritical() << "Failed to write data to memfd:" << strerror(errno);
::close(fd);
return QVariant("");
}
if (lseek(fd, 0, SEEK_SET) < 0) {
qCritical() << "Failed to seek memfd to beginning:" << strerror(errno);
::close(fd);
return QVariant("");
}
// 安全性改进:擦除 memfd 中的敏感数据
// 注意:由于 dbus 底层读取是异步的,直接在这里清零 memfd 可能会导致 dbus 侧读到全零数据。
// 如果要彻底清零,需要在 DBus 调用完成后的回调中进行,或者依赖 fd 关闭后内核对内存的回收。
// 因此,这里只对 QByteArray 进行了 fill('\0') 清零。
QDBusUnixFileDescriptor dbusFd;
dbusFd.giveFileDescriptor(fd);
// fd 的所有权已转移给 dbusFd,不需要再手动 close(fd)
return QVariant::fromValue(dbusFd);
}特别提醒关于 |
|
+1 |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: GongHeng2017, Johnson-zs, wangrong1069 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
/merge |
Replace pipe-based password transmission with memfd_create for better security and efficiency. Remove Qt5 compatibility code including base64 encoding/decoding logic.
使用 memfd_create 替代管道传递密码,提升安全性和效率。
移除 Qt5 兼容代码,包括 base64 编解码逻辑。
Log: 使用memfd替代管道传递网络挂载密码,移除Qt5兼容代码
PMS: https://pms.uniontech.com/task-view-389921.html
Influence: 所有网络挂载密码传输方式从管道改为内存文件描述符,不再支持Qt5版本。