特别鸣谢🚀帮助我配置邮箱等等
前言
起因是火箭前两天翻glibc的更新,看到一个对largebin attack
的修复
当时有点启发我,虽然咱只是个打CTF的,但是修个洞说不定还真行
打CTF的时候,一直都是跟在别人的脚步后面亦步亦趋,在别人制定的规则里面找漏洞,
我就想,要不我也交个patch试着修点东西?
不过这篇博客暂时不会记录修复的patch具体内容
这篇暂时先记录一下向glibc发送patch的过程本身遇到的各种问题
首先,向glibc发送patch,至少得知道他们怎么接受新的patch
在sourceware上找到glibc项目,
然后需要按他说的,先git clone
下整个仓库
然后阅读Documentation,其中完整讲解了如何发送patch,做contribution
(或许有点太完整了,乱七八糟的让人看不过来)
我会介绍一下比较重要的部分
流程
这里是大致的一个流程
- 克隆仓库
- 按照你的想法更改代码
- 如果你认为你找到了一个bug, 根据bug report的流程来做
- 测试你的代码是否奏效
- 如果没问题,就用
git add
和git commit
提交,就像平常的推代码流程一样,只不过不要push- 用
git format-patch
来生存你的patch文件- 用
git send-email
向[email protected]发送代码- 在patchwork中查看你的patch的处理情况
- 即使没有任何消息,也至少等一周再催
FSF CopyRight
这是一个署名条款,大致就是你遵循他们公开代码的那一套原则,同意公开你的代码等等
你需要做的就是在email的最后加上一个签名Signed-off-by: your-name-example <[email protected]>
等会介绍更简单的自动加上签名的方法,不过了解一下这个原理也是不错的
Commit格式
你需要在commit中描述一下你的patch作用,分为标题和主体
并且标题和主体中必须隔开一段,推荐用lazygit
来写commit,而不是git commit
lazygit
会帮你自动处理好这个分段,这样写起来会清晰不少
发送到哪?
libc-alpha接受针对所有系统的patch
libc-locale只接受针对某种特定系统的patch
libc-stable只接受对稳定发行的版本的patch和讨论
libc-help接受对于libc的一些疑问🤔
我这次想增加新功能,所以向libc-alpha
发送
如何发送
向libc发送邮箱还不是通过现代的图形化邮箱界面来发送
需要用古老的git format-patch
将你本地的新commit
生成为patch邮件
再通过git send-email
来发送,而且还需要邮箱客户端来认证你的身份
我这里就只介绍我的方法了(其实都是🚀教的,可以参考他的博客)
邮箱客户端
安装msmtp
,在家目录下配置.msmtprc
据🚀所说,outlook不行🙅♀️,所以我就按他说的用了gmail
1 | account default # 可以理解为msmtp的账户,等会还要用到 |
gmail
可以参考这篇文章
总之,在开启两步验证后,搜索通行密钥和安全密钥
,然后为msmtp新建一个
用google给你的密码填到.msmtprc
中
相当于谷歌看到msmtp提供这个密码,就认为可以信任msmtp
使用你的邮箱身份发送邮件✉
git config
你现在已经有一个邮件客户端,可以在不使用浏览器的情况下发送邮件
现在需要让你的git知道用什么邮件客户端来发消息,以及一些杂七杂八的vim .git/config
1 | [format] |
完整过程
总结一下
git clone git://sourceware.org/git/glibc.git
- 做你想要的更改
git add .
或者只加你更改的文件,然后推荐在lazygit
写commitgit format-patch origin/master
,其中originmaster
指定与谁对比来生成diff
会生成一个000什么什么的.patch文件
git send-email
可以参考git-send-email
如果发送新patch,直接设置--to
为libc-alpha
邮件地址即可
如果发送对于审核人员回复的回复,就比较复杂一点
建议随便在commit-preview找一篇,点进mailing list archive
会有关于reply
的方法,下面以我的commit为例
介绍一下如何回复我的这封邮件
找到想回复的Message-id
,然后将其放到--in-reply-to=
后面--to=
参数设为你要回复的人的邮件地址,这里是我的gmail--cc=
参数设为libc-alpha
git send-email
最后再加上你的.patch文件即可
最后
这种邮件的话还是比较正式的,尽可能注意礼貌
并且由于邮件远远没有现在的qq等即时通讯方便,最好讲得详细一些