- लेखक PowerPC32 architecture पर चलने वाले
gdbserver और multi-threaded application वाले एक प्रोजेक्ट में debugging समस्या से जूझ रहे थे.
- समस्या यह थी कि
gdbserver से कनेक्शन टूट जाता था, जिससे debug session को आगे नियंत्रित नहीं किया जा सकता था.
- शोध और जांच के बाद, लेखक को एक email thread मिली जो इस समस्या का कारण बने सटीक commit की ओर इशारा करती थी.
- लेखक ने PowerPC architecture और
task_struct के आसपास हुए बदलावों से जुड़ी commit descriptions पढ़ने में 3-4 दिन बिताए और यह समझने की कोशिश की कि क्या यह समस्या बाद के kernel versions में हल हो चुकी है.
- लेखक ने कई tools और techniques का इस्तेमाल किया, जैसे
thread_struct thread को इधर-उधर करना, pahole से task_struct का layout देखना, और ftrace का उपयोग करके यह पता लगाना कि debug किए जा रहे process के threads कब schedule हो रहे हैं.
- लेखक ने पाया कि यह समस्या memory corruption की हो सकती है, क्योंकि फंसा हुआ thread दूसरे threads के विपरीत केवल एक बार schedule हुआ था.
- लेखक ने Linux में hardware breakpoints का उपयोग किया और
__state field पर hardware breakpoint लगाकर यह पता करने के लिए Linux kernel module बनाया कि उस पर write कौन कर रहा है.
- लेखक ने पाया कि समस्या
ptrace_put_fpr के buffer overflow (जिसका उपयोग POKEUSER API करती है) के कारण थी, जिससे task_struct के महत्वपूर्ण fields, जैसे __state, overwrite हो रहे थे.
- लेखक ने इस समस्या को ठीक करने के लिए Linux kernel security team (
security@kernel.org) को patch भेजा, क्योंकि इससे security issue पैदा हो सकता था.
- PowerPC maintainer Michael Ellerman ने लेखक का patch स्वीकार करने के बजाय अपने version का fix लागू किया.
- लेखक को लगा कि उनके काम को ठीक से श्रेय नहीं मिला और उन्हें कम आंका गया; उन्हें केवल
Reported-by tag मिला.
- लेखक का पहला kernel contribution एक निराशाजनक और हतोत्साहित करने वाला अनुभव रहा, जिसमें ऐसे लोगों से बातचीत शामिल थी जो यह महत्वपूर्ण नहीं मानते कि लोगों को उनके काम का उचित श्रेय मिले.
1 टिप्पणियां
Hacker News राय