epoll_event cannot carry provenance on user data
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
调研方向
从现有的 Rust libc 对 epoll_event 的声明开始,并将其与 issue 中引用的 C 定义进行比较。确定 libc 1.0 是否应直接公开 union,或者 libc 0.2 是否需要单独的 event_data 和 event_ctl API;选定的保留来源信息的接口完成实现,并针对携带指针的使用场景完成检查,即表示完成。
由索引模型根据 Issue 内容生成。
描述
The epoll_event type is declared like this in C:
struct epoll_event {
uint32_t events; /* Epoll events */
epoll_data_t data; /* User data variable */
};
union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
};
typedef union epoll_data epoll_data_t;
However, the Rust version in libc is different -- it just uses u64 for the data field. That is, unfortunately, not equivalent -- u64 cannot carry pointer provenance, so programs that want to store a pointer in data (which is quite common) need to use exposed-provenance APIs (i.e., ptr/int casts). Tokio carries some funky hacks to avoid that.
Since the C API is actually compatible with strict provenance here, it would be nice to expose that in libc as well. Given this is a breaking change it can only happen for libc 1.0 -- though it would be possible to have a separate event_data type and event_ctl declaration in its own module even in libc 0.2.
- 主要语言
- Rust
- 星标
- 2.6k
- 派生
- 1.3k
- 平均合并
- 2 天 10 小时
- 30 天内合并 PR
- 26
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
rust-lang/libc 的其他 Issue
-
难度 1/5 1 小时以内 新手友好度 90/100
维护者通常 1 天内回复
-
riscv32gc-unknown-linux-gnu: `timex` uses the 32-bit `c_long` layout (144 bytes), glibc's riscv32 `struct timex` is 208 bytes可能已有人在做 @compiler-segfault 于 5 天前认领。 未关闭C-bug
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
Expose `open_how` on Android可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
RTEMS: `dirfd` is not declared可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
C-bug O-macos
难度 2/5 1-3 小时 新手友好度 68/100
rust-lang/libc#5650 · 16 条评论 ·
维护者通常 1 天内回复
相似的 Issue
-
SPLADE `/embed_sparse` output depends on the other inputs in the batch (candle BertModel / DistilBertModel)可能已有人在做 @0z5a 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
huggingface/text-embeddings-inference#979 ·
维护者通常 1 天内回复
-
good first issue help wanted
难度 2/5 1-3 小时 新手友好度 78/100
servo/rust-smallvec#874 ·
-
难度 1/5 1 小时以内 新手友好度 94/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 2 天内回复
-
ci enhancement need-triage
难度 2/5 1-3 小时 新手友好度 86/100
维护者通常 1 天内回复