[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7BT5AJCXTJBEXCC1MMCGNXT":3,"skill-same:01M7BT5AJCXTJBEXCC1MMCGNXT":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M7BT5AJCXTJBEXCC1MMCGNXT","syz-extract-constants",null,"Defining and extracting kernel constants for syzkaller syzlang descriptions","linyouxue\u002Fskill-repair-benchmark","linyouxue","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F216151464?v=4","01M7BJEVCXKD74KH6FG9CBVSQB","林宥学","01M7BJEVE02NP217V93BKZFC0J",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FMMG2Skill-GPT52-Gold31-20260923\u002Foriginals\u002Fsyzkaller-ppdev-syzlang\u002Fskills\u002Fsyz-extract-constants\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: syz-extract-constants\ndescription: Defining and extracting kernel constants for syzkaller syzlang descriptions\n---\n\n# Defining Constants in Syzlang\n\n## Overview\n\nSyzkaller needs to know the actual values of kernel constants (ioctl numbers, flags, etc.) to generate valid fuzzing programs. There are two ways to provide these values:\n\n1. **Manual `.const` file** - Define constants directly in a companion file\n2. **`syz-extract` tool** - Extract values from kernel source headers (requires kernel source)\n\n## Method 1: Manual Constants File (Recommended when no kernel source)\n\nCreate a `.const` file alongside your `.txt` file with the constant values:\n\n### File naming\n- Syzlang description: `sys\u002Flinux\u002Fdev_ppdev.txt`\n- Constants file: `sys\u002Flinux\u002Fdev_ppdev.txt.const`\n\n### Constants file format\n\n```\n# Constants for your syzlang descriptions\narches = 386, amd64, arm, arm64, mips64le, ppc64le, riscv64, s390x\nPPCLAIM = 28811\nPPRELEASE = 28812\nIEEE1284_MODE_NIBBLE = 0\nIEEE1284_MODE_BYTE = 1\n```\n\nThe `arches` line declares which architectures these constants are valid for. For architecture-independent constants (like ioctls), list all architectures.\n\n### Calculating ioctl values\n\nLinux ioctl numbers are encoded as:\n- `_IO(type, nr)` = `(type \u003C\u003C 8) | nr`\n- `_IOR(type, nr, size)` = `(2 \u003C\u003C 30) | (size \u003C\u003C 16) | (type \u003C\u003C 8) | nr`\n- `_IOW(type, nr, size)` = `(1 \u003C\u003C 30) | (size \u003C\u003C 16) | (type \u003C\u003C 8) | nr`\n- `_IOWR(type, nr, size)` = `(3 \u003C\u003C 30) | (size \u003C\u003C 16) | (type \u003C\u003C 8) | nr`\n\nFor ppdev (type='p'=0x70):\n- `PPCLAIM = _IO('p', 0x8b)` = `0x708b` = `28811`\n\n## Method 2: Using syz-extract (Requires kernel source)\n\nIf kernel source is available:\n\n```bash\ncd \u002Fopt\u002Fsyzkaller\n\n# Extract constants for a specific file\nmake extract TARGETOS=linux SOURCEDIR=\u002Fpath\u002Fto\u002Flinux FILES=sys\u002Flinux\u002Fdev_ppdev.txt\n```\n\n**Note:** This environment does not include kernel source. Use Method 1 (manual constants file) instead.\n\n## After Defining Constants\n\nAfter creating the `.const` file, build syzkaller:\n\n```bash\ncd \u002Fopt\u002Fsyzkaller\nmake descriptions  # Compiles descriptions + constants\nmake all           # Full build\n```\n\n## Common Errors\n\n### \"is defined for none of the arches\"\nThis means the constant is used in the `.txt` file but not defined in the `.const` file.\n- Add the missing constant to your `.const` file\n- Ensure `arches` line lists the target architectures\nPPCLAIM is defined for none of the arches\n```\n\nSolution: Run `make extract` with the correct kernel source path and FILES parameter.\n\n### Missing headers\n```\ncannot find include file: uapi\u002Flinux\u002Fppdev.h\n```\n\nSolution: Check the kernel source path and ensure headers are properly configured.\n\n### \"unknown file\"\n```\nunknown file: sys\u002Flinux\u002Fdev_ppdev.txt\n```\n\nSolution: Use `make extract FILES=...` instead of calling `bin\u002Fsyz-extract` directly.\n\n## Example Workflow\n\n1. Write the syzlang description file (`sys\u002Flinux\u002Fdev_ppdev.txt`)\n2. Run `make extract TARGETOS=linux SOURCEDIR=\u002Fopt\u002Flinux\u002Fsource FILES=sys\u002Flinux\u002Fdev_ppdev.txt`\n3. Run `make generate` to regenerate Go code\n4. Run `make` to build syzkaller\n5. Test with `make descriptions` to verify everything compiles\n","# Defining Constants in Syzlang\n\n## Overview\n\nSyzkaller needs to know the actual values of kernel constants (ioctl numbers, flags, etc.) to generate valid fuzzing programs. There are two ways to provide these values:\n\n1. **Manual `.const` file** - Define constants directly in a companion file\n2. **`syz-extract` tool** - Extract values from kernel source headers (requires kernel source)\n\n## Method 1: Manual Constants File (Recommended when no kernel source)\n\nCreate a `.const` file alongside your `.txt` file with the constant values:\n\n### File naming\n- Syzlang description: `sys\u002Flinux\u002Fdev_ppdev.txt`\n- Constants file: `sys\u002Flinux\u002Fdev_ppdev.txt.const`\n\n### Constants file format\n\n```\n# Constants for your syzlang descriptions\narches = 386, amd64, arm, arm64, mips64le, ppc64le, riscv64, s390x\nPPCLAIM = 28811\nPPRELEASE = 28812\nIEEE1284_MODE_NIBBLE = 0\nIEEE1284_MODE_BYTE = 1\n```\n\nThe `arches` line declares which architectures these constants are valid for. For architecture-independent constants (like ioctls), list all architectures.\n\n### Calculating ioctl values\n\nLinux ioctl numbers are encoded as:\n- `_IO(type, nr)` = `(type \u003C\u003C 8) | nr`\n- `_IOR(type, nr, size)` = `(2 \u003C\u003C 30) | (size \u003C\u003C 16) | (type \u003C\u003C 8) | nr`\n- `_IOW(type, nr, size)` = `(1 \u003C\u003C 30) | (size \u003C\u003C 16) | (type \u003C\u003C 8) | nr`\n- `_IOWR(type, nr, size)` = `(3 \u003C\u003C 30) | (size \u003C\u003C 16) | (type \u003C\u003C 8) | nr`\n\nFor ppdev (type='p'=0x70):\n- `PPCLAIM = _IO('p', 0x8b)` = `0x708b` = `28811`\n\n## Method 2: Using syz-extract (Requires kernel source)\n\nIf kernel source is available:\n\n```bash\ncd \u002Fopt\u002Fsyzkaller\n\n# Extract constants for a specific file\nmake extract TARGETOS=linux SOURCEDIR=\u002Fpath\u002Fto\u002Flinux FILES=sys\u002Flinux\u002Fdev_ppdev.txt\n```\n\n**Note:** This environment does not include kernel source. Use Method 1 (manual constants file) instead.\n\n## After Defining Constants\n\nAfter creating the `.const` file, build syzkaller:\n\n```bash\ncd \u002Fopt\u002Fsyzkaller\nmake descriptions  # Compiles descriptions + constants\nmake all           # Full build\n```\n\n## Common Errors\n\n### \"is defined for none of the arches\"\nThis means the constant is used in the `.txt` file but not defined in the `.const` file.\n- Add the missing constant to your `.const` file\n- Ensure `arches` line lists the target architectures\nPPCLAIM is defined for none of the arches\n```\n\nSolution: Run `make extract` with the correct kernel source path and FILES parameter.\n\n### Missing headers\n```\ncannot find include file: uapi\u002Flinux\u002Fppdev.h\n```\n\nSolution: Check the kernel source path and ensure headers are properly configured.\n\n### \"unknown file\"\n```\nunknown file: sys\u002Flinux\u002Fdev_ppdev.txt\n```\n\nSolution: Use `make extract FILES=...` instead of calling `bin\u002Fsyz-extract` directly.\n\n## Example Workflow\n\n1. Write the syzlang description file (`sys\u002Flinux\u002Fdev_ppdev.txt`)\n2. Run `make extract TARGETOS=linux SOURCEDIR=\u002Fopt\u002Flinux\u002Fsource FILES=sys\u002Flinux\u002Fdev_ppdev.txt`\n3. Run `make generate` to regenerate Go code\n4. Run `make` to build syzkaller\n5. Test with `make descriptions` to verify everything compiles\n",{"name":5,"description":7},"main","cdcb6d230f3b15c3c33f8a2bdd16439f43602cbe","evaluation\u002Fresults\u002FMMG2Skill-GPT52-Gold31-20260923\u002Foriginals\u002Fsyzkaller-ppdev-syzlang\u002Fskills\u002Fsyz-extract-constants",1,"https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark","https:\u002F\u002Fgithub.com\u002Flinyouxue","2026-11-14 20:28:35",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add linyouxue\u002Fskill-repair-benchmark --skill syz-extract-constants",{"tool":37,"command":38},"bunx","bunx skills add linyouxue\u002Fskill-repair-benchmark --skill syz-extract-constants",{"tool":40,"command":41},"pnpm","pnpm dlx skills add linyouxue\u002Fskill-repair-benchmark --skill syz-extract-constants","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FMMG2Skill-GPT52-Gold31-20260923\u002Foriginals\u002Fsyzkaller-ppdev-syzlang\u002Fskills\u002Fsyz-extract-constants\u002FSKILL.md",true,[],[46,53,60,67,72,77],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M7E1HGVRY73NBJ022CJG13X6","video-frame-extraction","Extract frames from video files and save them as images using OpenCV","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7E1HAG5R7CJ9C8NYJS771MB","openai-vision","Analyze images and multi-frame sequences using OpenAI GPT vision models","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7E1H7DADKB6QBWKC2KQ63SZ","image-ocr","Extract text content from images using Tesseract OCR via Python, including structured field extraction from receipts and forms","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[],{"skillNo":68,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M7E1H0WBNT43TENGQY7AVZHD","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":73,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7E1GTC7D4N4Q2EF03875J9E","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":78,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7E1GQ92CWFMGH53KSSE4WER","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[]]