Skip to main content

An Python version of patch.

Project description

ppatch

4514 可以直接revert 16995 可以revert 24122 5.10 没打这个补丁 3490 5.10 可以打回去 25636 下游和上游补丁不一致,下游可以打 68f19845f580a1d3ac1ef40e95b0250804e046bb 32250 同上,下游可以打 ea62d169b6e731e0b54abda1d692406f6bc6a696 34918 98827687593b579f20feb60c7ce3ac8a6fbb5f2en 处有修改 29661 c8bcd9c5be24fb9e6132e97da5a35e55a83e36b9 处有修改 10639 2a06b8982f8f2f40d03a3daf634676386bd84dbc 处有修改

6974 行数bug

25015 utf-8编码问题 11477 同上

准备的工具

  • getpatches 获取指定文件的所有补丁,支持正则匹配
  • apply 用于应用补丁
  • trace 用于追踪某个补丁的改动是否发生了修改
  • show 展示补丁信息

一些修改的例子

CVE-2022-34918

  • conflict file net/netfilter/nf_tables_api.c

  • correspond commit: 0a5e36dbcb448a7a8ba63d1d4b6ade2c9d3cc8bf

  • conflict commit: 98827687593b579f20feb60c7ce3ac8a6fbb5f2e

  • reason: 原补丁修改的代码和上下文一起被移除了

  • fix advice: 把没被删除的其他代码移除掉;添加 conflict commit 中涉及修改的 hunk

  • fix result: 可以通过添加同一 hunk 中被删除的代码的方式来 revert(需要注意上下文行)

    1. 确定影响 revert 的 hunk
    1. 将删除的部分加回去(怎么区分删除和添加?)或者直接将影响的 hunk 直接 revert(这一步很可能是失败的,不过理论上可以重复此过程)(要求这一过程对所有行有完全控制)
    2. revert 原 patch
    3. 根据第二步的记录,添加/删除不影响 revert 原 patch 的部分
  • 启发:patch revert 递归,依次打影响先前 patch 的 hunk

  • 流程

    1. revert 6301a7 的第一个 hunk
    2. revert 988276 的第二个 hunk
    3. revert CVE-2022-34918

CVE-2020-29661

  • conflict file drivers/tty/tty_jobctrl.c

  • correspond commit: 54ffccbf053b5b6ca4f6e45094b942fab92a25fc

  • conflict commit: c8bcd9c5be24fb9e6132e97da5a35e55a83e36b9

  • reason: 移动了原补丁修改的两行的位置

  • fix advice: 把修改后的两行修改回去 最小化(初始 patch)数据流

  • fix result: 形式上:把删除的两行加回去就能revert;语义上,conflict commit 修改了原 commit 的两行的位置,所以正确的修改是把换位置的这两行修改回去

  • 启发:和上一个不同的地方:修改涉及同一函数的两个 hunk,故把这两个都按照上面的流程走一遍

  • 这个例子还有个问题:如何判断什么时候要 revert 与被修改函数相关的 hunk,还是仅 revert 产生影响的 hunk

CVE-2019-10639

CVE-2019-11477

CVE-2019-11599

全 fail 了,没打对应补丁?

CVE-2017-5123

CVE-2017-11176

  • reason: 上下文被修改(下文)(-F 3 可以打) 比较简单,可以试一下

CVE-2019-18198

两个文件 Fail

CVE-2019-18683

5.10.y 没支持 vivid

CVE-2018-18805

没有 Documentation/networking/ip-sysctl.txt,5.10 里是 rst

CVE-2019-19241

CVE-2019-6974(skip)

最折磨人的一个,某个 patch 是错的,导致 stable 里也是错的

手动修改了8ed0579

76d58e 到 65c418 也有问题:发现有两个重复的 commit(为啥呀????)

CVE-2019-19377

CVE-2019-19816(skip)

CVE-2019-9503

  • 三个 conflict file 先跳过?

CVE-2021-44733

  • conflict file: drivers/tee/tee_shm.c

  • correspond commit: c05d8f66ec3470e5212c4d08c46d6cb5738d600d

  • 属于非修改行被修改,导致 patch 找不到合适位置的情况

  • 改进方案;

    1. 把追踪的范围扩大到整个 hunk
    2. 追踪到行之后,直接换回来

CVE-2022-0435

CVE-2022-1679

CVE-2023-32233

CVE-2020-25668

CVE-2019-25044

  • conflict file: block/blk-mq-sched.c

  • correspond commit: c3e2219216c92919a6bd1711f340f5faa98695e6

  • 很多问题:如果直接用 cli 调用 patch 的话,有些选项要 y,有些要 n,没法一次性全确定(如果 revert 算法能全自己实现的话就没有这个问题了)(虽然从某些例子来看,当前的算法在某些情况下会有问题)

0313

  • 优先找 syzbot 的例子
  • 数据表
  • 把例子1和例子2的方法总结试一下自动化

CVE-2019-12881 patch not found CVE-2019-15791 patch not found CVE-2019-15792 patch not found CVE-2019-19378 patch not found CVE-2019-19447 patch not found CVE-2019-19814 patch not found CVE-2021-20226 patch not found CVE-2021-3773 patch not found CVE-2021-4204 patch not found CVE-2021-3609 patch not found CVE-2021-3773 patch not found CVE-2022-1786 patch not found CVE-2022-23222 patch not found CVE-2022-24122 5.10 没打原补丁 CVE-2022-25265 patch not found CVE-2022-25636 下游和上游补丁不一致,下游可以打 68f19845f580a1d3ac1ef40e95b0250804e046bb CVE-2022-29968 没有 fs/io_uring.c CVE-2022-36123 patch not found CVE-2022-42719 unreversed detected 可能是没有打原补丁 CVE-2023-2008 patch not found 2020-29534 没有 fs/io_uring.c,还有一个 reverse fail。看起来是没打原补丁 2023-3269 全失败 看起来是是没有打原补丁 2023-3338 patch not found 2023-3640 patch not found 2023-2602 io_uring.c 没有 2020-29373 io_uring.c 没有 2020-14331 patch not found 2019-14898 patch not found 2023-21400 patch not found

其他

Git object

  • 想到一个问题:其实经过 revert 后的 patch 可能是引入了新的利用路径,或者其实是引入了新的 Bug

  • 重新评估 -F 3 和上下文

    • 上下文的修改可能导致漏洞触发路径发生改变
  • 遇到的新问题:上下游补丁不一致会导致追踪无效(因为影响补丁的行就没有被引入)

TODO:

  • 后期在初次 commit 添加的行也要标记 flag

  • 函数定义变化的影响

  • 局部变量变化

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ppatch-0.0.3.tar.gz (18.2 kB view hashes)

Uploaded Source

Built Distribution

ppatch-0.0.3-py3-none-any.whl (18.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page