এই পৃষ্ঠাটি android-mainline পাওয়া গুরুত্বপূর্ণ সমস্যা এবং বাগ ফিক্সের বর্ণনা করে যা অংশীদারদের জন্য তাৎপর্যপূর্ণ হতে পারে।
15 নভেম্বর, 2024
android-mainlineএবংandroid16-6.12জন্য ক্ল্যাং 19.0.1-এ আপডেট করা হয়েছে- সারাংশ: ক্ল্যাং-এর নতুন সংস্করণ অ্যারের জন্য একটি বাউন্ডস স্যানিটাইজার প্রবর্তন করে, যেখানে অ্যারের আকার
__counted_byঅ্যাট্রিবিউট ব্যবহার করে অ্যারের সাথে লিঙ্কযুক্ত একটি পৃথক ভেরিয়েবলে সংরক্ষণ করা হয়। অ্যারের আকার সঠিকভাবে আপডেট না হলে এই বৈশিষ্ট্যটি কার্নেল আতঙ্কের কারণ হতে পারে। ত্রুটি বার্তা এই মত দেখায়:
UBSAN: array-index-out-of-bounds in common/net/wireless/nl80211.c index 0 is out of range for type 'struct ieee80211_channel *[] __counted_by(n_channels)' (aka 'struct ieee80211_channel *[]')বিশদ বিবরণ: সীমার বাইরে অ্যাক্সেস সনাক্ত করে কার্নেলের অখণ্ডতা রক্ষা করার জন্য বাউন্ডস স্যানিটাইজার অপরিহার্য। এবং
CONFIG_UBSAN_TRAPসক্ষম করে, বাউন্ডস স্যানিটাইজার যেকোন অনুসন্ধানে কার্নেল আতঙ্কের সূত্রপাত করে।- বাউন্ডস স্যানিটাইজারের পূর্ববর্তী সংস্করণ শুধুমাত্র নির্দিষ্ট-আকারের অ্যারেগুলি পরীক্ষা করেছে এবং গতিশীলভাবে বরাদ্দ করা অ্যারেগুলি পরীক্ষা করতে পারেনি। নতুন সংস্করণ রানটাইমে অ্যারে সীমা নির্ধারণ করতে
__counted_byঅ্যাট্রিবিউট ব্যবহার করে এবং আউট-অফ-বাউন্ড অ্যাক্সেসের আরও কেস সনাক্ত করে। যাইহোক, কিছু ক্ষেত্রে, সাইজ ভেরিয়েবল সেট করার আগে অ্যারে অ্যাক্সেস করা হয়, যা বাউন্ডস স্যানিটাইজারকে ট্রিগার করে এবং কার্নেল প্যানিক সৃষ্টি করে। এই সমস্যাটি সমাধান করতে, অন্তর্নিহিত মেমরি বরাদ্দ করার সাথে সাথে অ্যারের আকার নির্ধারণ করুন, যেমন aosp/3343204 এ চিত্রিত হয়েছে।
- বাউন্ডস স্যানিটাইজারের পূর্ববর্তী সংস্করণ শুধুমাত্র নির্দিষ্ট-আকারের অ্যারেগুলি পরীক্ষা করেছে এবং গতিশীলভাবে বরাদ্দ করা অ্যারেগুলি পরীক্ষা করতে পারেনি। নতুন সংস্করণ রানটাইমে অ্যারে সীমা নির্ধারণ করতে
CONFIG_UBSAN_SIGNED_WRAPসম্পর্কে : Clang-এর নতুন সংস্করণ-fwrapvকম্পাইলার পতাকা থাকা সত্ত্বেও স্বাক্ষরিত পূর্ণসংখ্যা ওভারফ্লো এবং আন্ডারফ্লোকে স্যানিটাইজ করে।-fwrapvপতাকাটি সংজ্ঞায়িত ওভারফ্লো আচরণের সাথে স্বাক্ষরিত পূর্ণসংখ্যাকে দুটির পরিপূরক স্বাক্ষরবিহীন পূর্ণসংখ্যা হিসাবে বিবেচনা করার জন্য ডিজাইন করা হয়েছে।- লিনাক্স কার্নেলে স্বাক্ষরিত পূর্ণসংখ্যা ওভারফ্লোকে স্যানিটাইজ করা বাগ শনাক্ত করতে সাহায্য করতে পারে, এমন উদাহরণ রয়েছে যেখানে ওভারফ্লো ইচ্ছাকৃত হয়, উদাহরণস্বরূপ,
atomic_long_tএর সাথে। ফলস্বরূপ,CONFIG_UBSAN_SIGNED_WRAPঅক্ষম করা হয়েছে UBSAN কে শুধুমাত্র একটি বাউন্ডস স্যানিটাইজার হিসাবে কাজ করার অনুমতি দেওয়ার জন্য।
- লিনাক্স কার্নেলে স্বাক্ষরিত পূর্ণসংখ্যা ওভারফ্লোকে স্যানিটাইজ করা বাগ শনাক্ত করতে সাহায্য করতে পারে, এমন উদাহরণ রয়েছে যেখানে ওভারফ্লো ইচ্ছাকৃত হয়, উদাহরণস্বরূপ,
CONFIG_UBSAN_TRAPসম্পর্কে: UBSAN একটি কার্নেল প্যানিক ট্রিগার করার জন্য কনফিগার করা হয় যখন এটি কার্নেলের অখণ্ডতা রক্ষা করার জন্য একটি সমস্যা সনাক্ত করে। যাইহোক, আমরা 23 অক্টোবর থেকে 12 নভেম্বর পর্যন্ত এই আচরণটি অক্ষম করেছি৷ আমরা কম্পাইলার আপডেট আনব্লক করার জন্য এটি করেছি যখন আমরা পরিচিত__counted_byসমস্যার সমাধান করেছি।
- সারাংশ: ক্ল্যাং-এর নতুন সংস্করণ অ্যারের জন্য একটি বাউন্ডস স্যানিটাইজার প্রবর্তন করে, যেখানে অ্যারের আকার
নভেম্বর 1, 2024
- Linux 6.12-rc4 ল্যান্ডিং
- সারাংশ:
CONFIG_OF_DYNAMICসম্ভাব্য ত্রুটিপূর্ণ ড্রাইভারের জন্য গুরুতর রিগ্রেশন সৃষ্টি করে। - বিশদ বিবরণ: লিনাক্স
6.12-rc1android-mainlineমার্জ করার সময় আমরা লক্ষ্য করেছি যে গাছের বাইরের ড্রাইভারগুলি লোড করতে ব্যর্থ হয়েছে। যে পরিবর্তনটি ড্রাইভার বাগগুলি উন্মোচন করেছে তা কমিট274aff8711b2 ("clk: Add KUnit tests for clks registered with struct clk_parent_data")হিসাবে চিহ্নিত করা হয়েছিল এবং আমরা অস্থায়ীভাবে এটি aosp/3287735 এ ফিরিয়ে দিয়েছি। পরিবর্তনটিCONFIG_OF_OVERLAYনির্বাচন করে, যাCONFIG_OF_DYNAMICনির্বাচন করে।!OF_DYNAMICসাথে,of_node_get()এবংof_node_put()এর রেফ-কাউন্টিং কার্যকরভাবে নিষ্ক্রিয় করা হয়েছে কারণ সেগুলিnoopsহিসাবে প্রয়োগ করা হয়েছে।OF_DYNAMICসক্ষম করা আবার ড্রাইভারের সমস্যাগুলি প্রকাশ করে যাstruct device_nodeজন্য ভুলভাবে রেফ-কাউন্টিং প্রয়োগ করে। এটি মেমরি দুর্নীতি, ব্যবহার-পর-মুক্ত, এবং মেমরি ফাঁসের মতো বিভিন্ন ধরণের ত্রুটি ঘটায়। - পার্সিং সম্পর্কিত API-এর সমস্ত ব্যবহার অবশ্যই পরিদর্শন করা উচিত। নিম্নলিখিত তালিকাটি আংশিক, কিন্তু আমরা পর্যবেক্ষণ করছি এমন কেস রয়েছে:
- বিনামূল্যে ব্যবহার করুন (UAF):
- একই
device_nodeআর্গুমেন্টের পুনঃব্যবহার: এই ফাংশনগুলি প্রদত্ত নোডেof_node_put()কল করে, সম্ভাব্যভাবে তাদের কল করার আগে একটিof_node_get()যোগ করতে হবে (উদাহরণস্বরূপ, যখন একই নোডের সাথে বারবার কল করা হয় আর্গুমেন্ট হিসাবে):-
of_find_compatible_node() -
of_find_node_by_name() -
of_find_node_by_path() -
of_find_node_by_type() -
of_get_next_cpu_node() -
of_get_next_parent() -
of_get_next_child() -
of_get_next_available_child() -
of_get_next_reserved_child() -
of_find_node_with_property() -
of_find_matching_node_and_match()
-
- নির্দিষ্ট লুপ থেকে যেকোনো ধরনের প্রস্থান করার পরে
device_nodeব্যবহার করুন:-
for_each_available_child_of_node_scoped() -
for_each_available_child_of_node() -
for_each_child_of_node_scoped() -
for_each_child_of_node()
-
- চারপাশে
device_nodeথেকেchar *বৈশিষ্ট্যে সরাসরি পয়েন্টার রাখা, উদাহরণস্বরূপ, ব্যবহার করে:-
const char *foo = struct device_node::name -
of_property_read_string() -
of_property_read_string_array() -
of_property_read_string_index() -
of_get_property()
-
- একই
- মেমরি লিক:
- একটি
device_nodeপাওয়া এবং এটি আনরিফ করতে ভুলে যাওয়া (of_node_put())। এগুলি থেকে ফিরে আসা নোডগুলিকে কিছু সময়ে মুক্ত করা দরকার:-
of_find_compatible_node() -
of_find_node_by_name() -
of_find_node_by_path() -
of_find_node_by_type() -
of_find_node_by_phandle() -
of_parse_phandle() -
of_find_node_opts_by_path() -
of_get_next_cpu_node() -
of_get_compatible_child() -
of_get_child_by_name() -
of_get_parent() -
of_get_next_parent() -
of_get_next_child() -
of_get_next_available_child() -
of_get_next_reserved_child() -
of_find_node_with_property() -
of_find_matching_node_and_match()
-
- একটি
- একটি লুপ পুনরাবৃত্তি থেকে একটি
device_nodeরাখা। আপনি যদি নিম্নলিখিতগুলির মধ্যে থেকে ফিরে আসছেন বা ভেঙে যাচ্ছেন, তাহলে আপনাকে কিছু সময়ে অবশিষ্ট রেফারেন্সটি ফেলে দিতে হবে:-
for_each_available_child_of_node() -
for_each_child_of_node() -
for_each_node_by_type() -
for_each_compatible_node() -
of_for_each_phandle()
-
- বিনামূল্যে ব্যবহার করুন (UAF):
- Linux
6.12-rc4( aosp/3315251 দেখুন) অবতরণ করার সময় পূর্বে উল্লেখিত পরিবর্তনটি পুনরুদ্ধার করা হয়েছিলCONFIG_OF_DYNAMICআবার সক্রিয় করে এবং সম্ভাব্য ত্রুটিপূর্ণ ড্রাইভারগুলিকে প্রকাশ করে।
- সারাংশ: