Contribution to Open source

DPDK library 코드를 보는 중 이상한 코드를 발견해서 patch를 submit했다. 난생 처음이네.

Git을 이용해서 코드 관리를 하고 있어 패치를 내려고 해도 git을 이용해야 한다. 그리고 coding style도 확인해서 부합되지 않는 내용이 있어도 등록이 안된다고 해서 이것도 확인. 이 과정에서 linux kernel에서 사용하는 checkstyle script라는 것도 알게되고. 이걸 쓰면 codinf style을 맞추기 위해 고생할 일이 많이 줄 듯 하다. 주변에 이걸 신경 쓰는 사람이 거의 없다는 게 함정이지만

Patch 작업은 http://dpdk.org/dev 여기랑 http://dpdk.org/doc/guides/contributing/patches.html에 상세한 절차가 나와있다.

대략적으로 보면 git에서 commit하고 patch 파일 만들어서 coding style 검사한 후 git send mail로 패치 내용을 정해진 양식에 따라 설명을 추가해서 보내면 된다.

간단한 수정이었는데 patch를 진짜 보내기까지 몇 번을 반복했다. checkstyle script를 한번에 통과하지 미 못해서 그랬는데 다시 수정해서 패치를 만든 방법을 잘 몰라서 무식하게 git clone부터 하는 작업을 반복해야 했다는.

그 결과는 여기에.

If any fragment hole is found in ipv4_frag_reassemble() and ipv6_frag_reassemble(),whole ip_frag_pkt mbufs are moved to death-row. Any mbufs already chained to another mbuf are freed multiple times as there are still in ip_frag_pkt array.

Signed-off-by: cychong <cychong at gmail.com>

그리고 이건 내가 수정한 내용에 대해 maintainer(?)가 확인한 내용

Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>

그리고 최종적으로 패치가 적용되었다고 추가 메일이 날아왔다.

> > If any fragment hole is found in ipv4_frag_reassemble() and ipv6_frag_reassemble(),
> > whole ip_frag_pkt mbufs are moved to death-row. Any mbufs already chained to
> > another mbuf are freed multiple times as there are still in ip_frag_pkt array.
> > 
> > Signed-off-by: cychong <cychong at gmail.com>
> 
> Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>

Applied, thanks

이 과정은 mailing list에서 확인할 수 있다.

아마 다음 버전 16.07이 릴리즈될 때 포함될 듯.

Update

git pull하니 patch가 반영되었네.

$ git log --oneline --graph
...
* 6226aa5 lpm6: fix missing header dependency
* 7cc3f2c lpm: fix freeing in compatibility mode
* 62aaf55 ip_frag: fix double free of chained imbues
…

$ git log
...

commit 62aaf5524c04d030e7c408ba2742829e38aaaaab
Author: Chaeyong Chong <cychong@gmail.com>
Date:   Fri Apr 22 02:28:01 2016 +0900

    ip_frag: fix double free of chained mbufs

    If any fragment hole is found in ipv4_frag_reassemble() and
    ipv6_frag_reassemble(), whole ip_frag_pkt mbufs are moved to death-row.
    Any mbufs already chained to another mbuf are freed multiple times as
    there are still in ip_frag_pkt array.

    Signed-off-by: Chaeyong Chong <cychong@gmail.com>
    Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

Leave a Reply

Your email address will not be published. Required fields are marked *