
शेल स्क्रिप्ट जो IPv4 use-after-free CVE-2026-98432 के लिए अपस्ट्रीम kfree_rcu फ़िक्स युक्त पैच किए गए Ubuntu कर्नेल .deb पैकेज बनाती है।
build-patched-kernel.sh Ubuntu कर्नेल .deb पैकेज बनाता है जिनमें CVE-2026-98432
का अपस्ट्रीम फ़िक्स शामिल है:
e3f33b0a1d89 "ipv4: free inet_opt and ireq_opt after an RCU grace period"
यह बग ip_options_build() में एक use-after-free है। एक CPU अभी भी SYNACK भेज
रहा हो सकता है जबकि दूसरा TCP सॉकेट के IPv4 विकल्पों को मुक्त कर रहा हो। यह फ़िक्स
net/ipv4/af_inet.c और net/ipv4/tcp_ipv4.c में दो kfree() कॉल्स को
kfree_rcu() से बदल देता है।
uname -r से (जैसे 6.8.0-45-generic)।deb-src रिपॉज़िटरीज़ सक्षम करती है और कंपाइलर तथा बिल्ड टूल्स इंस्टॉल करती है।apt-get source के साथ वह Ubuntu सोर्स पैकेज डाउनलोड करती है जिसने इस कर्नेल
को बनाया था। यदि आर्काइव में वह संस्करण अब उपलब्ध नहीं है, तो यह Launchpad से
pull-lp-source पर वापस चली जाती है। फिर यह बिल्ड निर्भरताएँ इंस्टॉल करती है।kfree_rcu() NULL स्वीकार नहीं करता, यह एक NULL जाँच
जोड़ती है।+cve202698432.1 जोड़ती है, ताकि नए पैकेज उसी ABI वाले
आर्काइव पैकेजों को अपग्रेड कर सकें।debian/rules के साथ बिल्ड करती है और .deb फ़ाइलों को
./debs-<version>/ में कॉपी करती है।स्क्रिप्ट को दोबारा चलाने पर डाउनलोड किए गए सोर्स दोबारा उपयोग होते हैं और उन्हें दो बार पैच नहीं किया जाता।
Ubuntu मशीन पर ही (root या sudo के साथ चलाएँ):
./build-patched-kernel.sh # kernel from uname -r
./build-patched-kernel.sh 6.8.0-45-generic # a specific kernel
Docker में, उस Ubuntu रिलीज़ का उपयोग करें जो कर्नेल से मेल खाती हो (6.8 के लिए
noble, 5.15 के लिए jammy)। संस्करण स्पष्ट रूप से पास करें, क्योंकि कंटेनर के अंदर
uname -r होस्ट का कर्नेल दिखाता है:
docker run --rm -v "$PWD":/work -w /work -e WORKDIR=/build ubuntu:24.04 \
./build-patched-kernel.sh 6.8.0-45-generic
WORKDIR=/build कर्नेल सोर्स को कंटेनर के अंदर रखता है। यह आपको तब आवश्यक है
जब माउंट की गई डायरेक्टरी case-insensitive हो, जैसे macOS पर। अन्य सेटिंग्स
(OUTDIR, LOCAL_SUFFIX, SRC_PACKAGE/SRC_VERSION, JOBS) का वर्णन स्क्रिप्ट
के शीर्ष पर किया गया है।
sudo apt install ./debs-<version>/linux-image-unsigned-<version>_*.deb \
./debs-<version>/linux-modules-<version>_*.deb \
./debs-<version>/linux-modules-extra-<version>_*.deb \
./debs-<version>/linux-headers-*.deb
sudo reboot
कर्नेल इमेज अहस्ताक्षरित (unsigned) है और यह हस्ताक्षरित
linux-image-<version> पैकेज को प्रतिस्थापित करती है। यदि Secure Boot चालू है,
तो या तो इमेज को अपनी MOK कुंजी से हस्ताक्षरित करें या Secure Boot बंद कर दें।