`F_GETPIPE_SZ` returns `EINVAL`, and `F_SETLEASE` returns 65536
メンテナーはふだん 2 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 72/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- c
調査の方向性
src/syscall/fs.c の sys_fcntl から始めてください。そこではswitchが F_GETPIPE_SZ に case 1024 を使っています。issueに書かれたLinuxの F_LINUX_SPECIFIC_BASE のオフセットと、コマンド番号を比較してください。reproducerをコンパイルし、パイプと通常ファイルの両方で実行します。F_GETPIPE_SZ がパイプのサイズを返し、パイプに対する F_SETLEASE が EINVAL を返し、ファイルに対する F_SETLEASE が 0 を返せば完了です。これは表のLinuxの行と一致します。
索引モデルが issue の本文から書いたものです。
説明
sys_fcntl (src/syscall/fs.c) answers F_GETPIPE_SZ under case 1024. Linux counts these commands from F_LINUX_SPECIFIC_BASE, which is 1024: F_SETLEASE is 1024, F_GETLEASE is 1025, F_SETPIPE_SZ is 1031 and F_GETPIPE_SZ is 1032. The real F_GETPIPE_SZ therefore reaches the default arm and returns EINVAL, and F_SETLEASE returns 65536 on any fd, which its caller reads as success.
Reproducer:
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int p[2];
pipe(p);
int file = open("/tmp/lease-file", O_CREAT | O_RDONLY, 0600);
errno = 0;
printf("F_GETPIPE_SZ on a pipe: %d errno=%d\n", fcntl(p[0], F_GETPIPE_SZ),
errno);
errno = 0;
printf("F_SETLEASE on a pipe: %d errno=%d\n",
fcntl(p[0], F_SETLEASE, F_RDLCK), errno);
errno = 0;
printf("F_SETLEASE on a file: %d errno=%d\n",
fcntl(file, F_SETLEASE, F_RDLCK), errno);
unlink("/tmp/lease-file");
return 0;
}
F_GETPIPE_SZ on a pipe |
F_SETLEASE on a pipe |
F_SETLEASE on a file |
|
|---|---|---|---|
elfuse b57f367 |
-1, EINVAL |
65536 | 65536 |
| Linux 6.12 under qemu | 65536 | -1, EINVAL |
0 |
F_SETPIPE_SZ is under the right number. It returns its argument and leaves the host pipe as it is, which the comment beside it says.
- 主要言語
- C
- スター
- 271
- フォーク
- 28
- 平均マージ
- 2日 16時間
- マージ済み PR(30日)
- 15
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
sysprog21/elfuse のほかの issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
メンテナーはふだん 2 日以内に返信
-
bug
難易度 3/5 1〜2日 初心者へのやさしさ 50/100
メンテナーはふだん 2 日以内に返信
-
bug
難易度 3/5 1〜2日 初心者へのやさしさ 62/100
メンテナーはふだん 2 日以内に返信
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 40/100
メンテナーはふだん 2 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
メンテナーはふだん 2 日以内に返信
sysprog21/elfuse の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
メンテナーはふだん 1 日以内に返信
-
bug good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
tmewett/BrogueCE#929 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug : find_key() compares kty against "ocy" instead of "oct", breaking kid-less HS256 verificationオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
OpenPrinting/cups#1756 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1〜3時間 初心者へのやさしさ 76/100
SteamGridDB/SGDBoop#147 ·
-
Doc: insert executor and incremental consolidation leave sorted runs, not globally sorted headsオープン
難易度 1/5 1時間未満 初心者へのやさしさ 83/100
semantic-reasoning/wirelog#2133 ·
メンテナーはふだん 1 日以内に返信