{"id":51866,"date":"2017-08-09T15:37:59","date_gmt":"2017-08-09T07:37:59","guid":{"rendered":"https:\/\/blog.trendmicro.com.tw\/?p=51866"},"modified":"2017-08-22T15:38:49","modified_gmt":"2017-08-22T07:38:49","slug":"f2fs-%e6%aa%94%e6%a1%88%e7%b3%bb%e7%b5%b1%e6%bc%8f%e6%b4%9e%e5%8f%af%e8%83%bd%e5%b0%8e%e8%87%b4-android-%e5%92%8c-linux-%e8%a8%98%e6%86%b6%e9%ab%94%e8%b3%87%e6%96%99%e6%90%8d%e6%af%80","status":"publish","type":"post","link":"https:\/\/blog.trendmicro.com.tw\/?p=51866","title":{"rendered":"F2FS \u6a94\u6848\u7cfb\u7d71\u6f0f\u6d1e\u53ef\u80fd\u5c0e\u81f4 Android \u548c Linux \u8a18\u61b6\u9ad4\u8cc7\u6599\u640d\u6bc0"},"content":{"rendered":"<p><a href=\"https:\/\/source.android.com\/security\/bulletin\/2017-08-01\"><img decoding=\"async\" class=\"alignleft\" src=\"https:\/\/blog.trendmicro.com\/trendlabs-security-intelligence\/files\/2016\/09\/feature-mobile.jpg\" \/>Android \u516b\u6708\u4efd\u5b89\u5168\u6027\u516c\u544a<\/a>\u5305\u542b\u4e86\u4e09\u500b\u8da8\u52e2\u79d1\u6280\u7814\u7a76\u4eba\u54e1\u767c\u73fe\u7684\u6a94\u6848\u7cfb\u7d71\u6f0f\u6d1e (<a href=\"https:\/\/www.cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2017-10663\">CVE-2017-10663<\/a>\u3001<a href=\"https:\/\/www.cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2017-10662\">CVE-2017-10662<\/a> \u548c <a href=\"https:\/\/www.cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2017-0750\">CVE-2017-0750<\/a>)\u3002\u9019\u4e9b\u6f0f\u6d1e\u53ef\u80fd\u9020\u6210\u88dd\u7f6e\u8a18\u61b6\u9ad4\u4e2d\u7684\u8cc7\u6599\u640d\u6bc0\uff0c\u8b93\u60e1\u610f\u7a0b\u5f0f\u5728\u7cfb\u7d71\u6838\u5fc3\u5167\u57f7\u884c\u60e1\u610f\u7a0b\u5f0f\u78bc\uff0c\u9032\u800c\u5b58\u53d6\u4e26\u638c\u63e1\u66f4\u591a\u8cc7\u6599\u3002\u6b79\u5f92\u53ef\u5229\u7528\u60e1\u610f\u7a0b\u5f0f\u4f86\u639b\u8f09\u4e00\u500b <a href=\"https:\/\/f2fs.wiki.kernel.org\/\">F2FS<\/a> (Flash-Friendly File System) \u683c\u5f0f\u7684\u78c1\u789f\u4f86\u89f8\u767c\u9019\u9805\u6f0f\u6d1e\uff0c\u9019\u500b\u78c1\u789f\u53ef\u4ee5\u662f\u5be6\u9ad4\u78c1\u789f\u6216\u865b\u64ec\u78c1\u789f\u6620\u50cf\u3002<\/p>\n<p>F2FS \u662f\u4e00\u7a2e\u5c08\u9580\u91dd\u5c0d\u5feb\u9583\u8a18\u61b6\u9ad4 (NAND) \u88dd\u7f6e (\u5982\u96a8\u8eab\u789f) \u800c\u6700\u4f73\u5316\u7684\u6a94\u6848\u7cfb\u7d71\u3002\u4efb\u4f55\u53ef\u639b\u8f09 F2FS \u6a94\u6848\u7cfb\u7d71\u7684\u88dd\u7f6e\u90fd\u5b58\u5728\u9019\u9805\u6f5b\u5728\u98a8\u96aa\u3002\u5c31 Android \u800c\u8a00\uff0c\u6700\u5371\u96aa\u7684\u662f\u90a3\u4e9b\u9810\u8a2d\u4f7f\u7528 F2FS \u6a94\u6848\u7cfb\u7d71\u7684\u88dd\u7f6e\uff0c\u4f8b\u5982\uff1aMotorola\u3001Huawei \u548c OnePlus \u7684\u624b\u6a5f\uff0c\u56e0\u6b64\u6709\u6578\u4ee5\u767e\u842c\u8a08\u7684\u7528\u6236\u90fd\u53ef\u80fd\u906d\u99ed\u3002\u4e0d\u904e\uff0c\u9019\u9805\u653b\u64ca\u6280\u5de7\u8981\u80fd\u6210\u529f\uff0c\u99ed\u5ba2\u5fc5\u9808\u5148\u99ed\u5165\u67d0\u500b\u5177\u5099\u6a94\u6848\u7cfb\u7d71\u639b\u8f09\u6b0a\u9650\u7684\u57f7\u884c\u7a0b\u5e8f\u624d\u884c\u3002<\/p>\n<p>\u81f3\u65bc Linux\uff0c\u554f\u984c\u5c31\u66f4\u52a0\u56b4\u91cd\u3002Linux \u6838\u5fc3\u5f9e <a href=\"https:\/\/lkml.org\/lkml\/2013\/2\/18\/476\">2013 \u5e74\u767c\u8868<\/a>\u7684 3.8 \u7248\u8d77\u5c31\u958b\u59cb\u652f\u63f4 F2FS \u6a94\u6848\u7cfb\u7d71\u3002\u56e0\u6b64\uff0c\u8a72\u7248\u672c\u4e4b\u5f8c\u7684\u6240\u6709 Linux \u88dd\u7f6e\u90fd\u5b58\u5728\u9019\u9805\u6f5b\u5728\u5371\u96aa\u3002\u53ea\u4e0d\u904e\uff0c\u4e26\u975e\u6240\u6709 Linux \u767c\u884c\u7248\u672c\u90fd\u6703\u9810\u8a2d\u555f\u7528 F2FS \u529f\u80fd\u3002\u800c\u90a3\u4e9b\u5728\u63d2\u5165 USB \u96a8\u8eab\u789f\u6642\u6703\u81ea\u52d5\u639b\u8f09\u8a72\u78c1\u789f\u7684\u88dd\u7f6e\u98a8\u96aa\u6700\u9ad8\uff0c\u56e0\u70ba\u99ed\u5ba2\u53ea\u9700\u5c07\u4e00\u500b\u542b\u6709 F2FS \u6f0f\u6d1e\u653b\u64ca\u7a0b\u5f0f\u7684\u96a8\u8eab\u789f\u63d2\u5165\u7cfb\u7d71\u5c31\u80fd\u89f8\u767c\u9019\u9805\u6f0f\u6d1e\u3002<\/p>\n<p><em><strong>\u6280\u8853\u7d30\u7bc0<\/strong><\/em><\/p>\n<p>\u9019\u9805\u6f0f\u6d1e\u51fa\u5728\u8b80\u53d6 F2FS \u6a94\u6848\u7cfb\u7d71\u7d50\u69cb\u7684\u7a0b\u5f0f\u78bc\uff1a\u99ed\u5ba2\u53ea\u8981\u5728\u542b\u6709\u6f0f\u6d1e\u7684\u7cfb\u7d71\u4e0a\u4f7f\u7528\u00a0<em>losetup<\/em> \u4f86\u639b\u8f09\u4e00\u500b\u60e1\u610f\u7684\u78c1\u789f\u6216\u672c\u5730\u7aef\u78c1\u789f\u6620\u50cf\u6a94\uff0c\u5373\u53ef\u9020\u6210\u7cfb\u7d71\u8a18\u61b6\u9ad4\u8cc7\u6599\u640d\u6bc0\uff0c\u9032\u800c\u8b93\u60e1\u610f\u7a0b\u5f0f\u5728\u7cfb\u7d71\u6838\u5fc3\u5167\u90e8\u57f7\u884c\u60e1\u610f\u7a0b\u5f0f\u78bc\u3002\u524d\u9762\u767c\u5e03\u7684\u4e09\u9805\u6f0f\u6d1e\u90fd\u53ef\u80fd\u8b93\u60e1\u610f\u7a0b\u5f0f\u5beb\u5165\u6b63\u5e38\u7bc4\u570d\u4e4b\u5916\u7684\u8a18\u61b6\u9ad4\uff0c\u4fc3\u4f7f\u7cfb\u7d71\u57f7\u884c\u5176\u60e1\u610f\u7a0b\u5f0f\u78bc\u3002<!--more--><\/p>\n<p>\u7b2c\u4e00\u500b\u6f0f\u6d1e (CVE-2017-10663) \u7684\u5f62\u6210\u539f\u56e0\u662f<a href=\"https:\/\/android.googlesource.com\/kernel\/tegra\/+\/android-tegra-dragon-3.18-nougat-mr2\/fs\/f2fs\/segment.c#846\">\u67d0\u884c\u539f\u59cb\u7a0b\u5f0f\u78bc<\/a>\u6c92\u6709\u505a\u597d\u9069\u7576\u7684\u7de9\u885d\u5340\u908a\u754c\u6aa2\u67e5\uff1a<\/p>\n<p>__set_sit_entry_type(sbi, type, curseg-&gt;segno, modified);<\/p>\n<p>\u9019\u884c\u7a0b\u5f0f\u78bc\u4e2d\u7684\u00a0<em>curseg-&gt;segno<\/em>\u00a0\u547c\u53eb\u53ef\u80fd\u56e0\u70ba\u578b\u614b\u4e0d\u6b63\u78ba\u800c\u5c0e\u81f4\u8cc7\u6599\u5beb\u8d85\u51fa\u7de9\u885d\u5340\u7684\u7bc4\u570d\u4e4b\u5916\u3002<\/p>\n<p>\u7b2c\u4e8c\u500b\u6f0f\u6d1e (CVE-2017-10662) \u662f\u4e00\u500b<a href=\"https:\/\/android.googlesource.com\/kernel\/tegra\/+\/android-tegra-dragon-3.18-nougat-mr2\/fs\/f2fs\/segment.c#1773\">\u6574\u6578\u6ea2\u4f4d<\/a>\u6f0f\u6d1e\uff1a<\/p>\n<p>sit_i-&gt;sentries = vzalloc(MAIN_SEGS(sbi) * sizeof(struct seg_entry));<\/p>\n<p>\u5728\u4e00\u500b 32 \u4f4d\u5143\u4f5c\u696d\u7cfb\u7d71\u4e0a\uff0c<em>MAIN_SEGS(sbi) * sizeof(struct seg_entry)<\/em>\u00a0\u9019\u6bb5\u7a0b\u5f0f\u78bc\u8a08\u7b97\u51fa\u4f86\u7684\u6578\u503c\u53ef\u80fd\u5927\u65bc 32 \u4f4d\u5143\u6b63\u6574\u6578\u53ef\u8868\u793a\u7684\u6578\u503c\uff0c\u53cd\u800c\u8b93\u8a72\u6578\u503c\u56de\u904e\u982d\u4f86\u8b8a\u6210\u4e00\u500b\u5f88\u5c0f\u7684\u6578\u5b57\uff0c\u5c0e\u81f4\u7cfb\u7d71\u914d\u7f6e\u7684\u8a18\u61b6\u9ad4\u7de9\u885d\u5340\u592a\u5c0f\u3002\u63a5\u8457\uff0c\u7576\u7a0b\u5f0f\u78bc\u5beb\u5165\u7de9\u885d\u5340\u6642\uff0c\u5c31\u53ef\u80fd\u8d85\u51fa\u7de9\u885d\u5340\u7684\u908a\u754c\u3002<\/p>\n<p>\u7b2c\u4e09\u500b\u6f0f\u6d1e (CVE-2017-0750) \u540c\u6a23\u4e5f\u662f\u7a0b\u5f0f\u78bc\u672a\u505a\u597d\u9069\u7576\u7de9\u885d\u5340\u908a\u754c\u6aa2\u67e5\u800c\u9020\u6210\u3002\u6b64\u554f\u984c\u5df2\u5728 Linux \u6838\u5fc3 4.4.73 \u7248\u7576\u4e2d\u4fee\u6b63\uff0c\u52a0\u5165\u4e86\u4ee5\u4e0b\u6aa2\u67e5\uff1a<\/p>\n<p>\/* check log blocks per segment *\/<br \/>\nif (le32_to_cpu(raw_super-&gt;log_blocks_per_seg) != 9) {<br \/>\nf2fs_msg(sb, KERN_INFO,<br \/>\n\u201cInvalid log blocks per segment (%u)\\n\u201d,<br \/>\nle32_to_cpu(raw_super-&gt;log_blocks_per_seg));<br \/>\nreturn 1;<br \/>\n}<\/p>\n<p>\u7136\u800c\uff0c\u7d55\u5927\u591a\u6578\u7684 Android \u88dd\u7f6e\u90fd\u65e9\u65bc\u9019\u500b\u7248\u672c\uff0c\u56e0\u6b64\u5176\u7a0b\u5f0f\u78bc\u4ecd\u6709\u5beb\u51fa\u7de9\u885d\u5340\u4e4b\u5916\u7684\u6f0f\u6d1e\uff1a<\/p>\n<p>last_offset = sbi-&gt;blocks_per_seg;<br \/>\naddr = START_BLOCK(sbi, segno);<br \/>\nsum_entry = &amp;sum-&gt;entries[0];<br \/>\nfor (i = 0; !err &amp;&amp; i &lt; last_offset; i += nrpages, addr += nrpages) {<br \/>\nnrpages = min(last_offset \u2013 i, bio_blocks);<br \/>\n\/* readahead node pages *\/<br \/>\nnrpages = ra_sum_pages(sbi, pages, addr, nrpages);<\/p>\n<p><strong><em>\u56e0\u61c9\u5c0d\u7b56<\/em><\/strong><\/p>\n<p>\u5c0d\u65bc\u684c\u4e0a\u578b\u96fb\u8166\u6216\u4f3a\u670d\u5668\u4f7f\u7528\u8005\u4f86\u8aaa\uff0c\u53ea\u8981\u5347\u7d1a\u81f3\u6700\u65b0\u7248\u672c\u7684 Linux \u6838\u5fc3\u5373\u53ef\u4fee\u6b63\u4e0a\u8ff0\u6f0f\u6d1e\u3002\u7576\u7136\uff0c\u7cfb\u7d71\u7ba1\u7406\u54e1\u4e5f\u53ef\u81ea\u884c\u91cd\u65b0\u7d44\u8b6f Linux \u6838\u5fc3\uff0c\u6216\u8005\u7b49\u5230\u5176\u4f7f\u7528\u7684 Linux \u767c\u884c\u7248\u672c\u91cb\u51fa\u66f4\u65b0\u3002\u540c\u6642\uff0c\u6211\u5011\u4e5f\u5efa\u8b70\u4f7f\u7528\u8005\u5728\u639b\u8f09 F2FS \u683c\u5f0f\u7684\u88dd\u7f6e\u6642\u8981\u7279\u5225\u5c0f\u5fc3\u3002<\/p>\n<p>\u5c31\u884c\u52d5\u88dd\u7f6e\u800c\u8a00\uff0c\u9810\u8a2d\u4f7f\u7528 F2FS \u6a94\u6848\u7cfb\u7d71\u7684\u88dd\u7f6e\u6240\u9762\u81e8\u7684\u98a8\u96aa\u6700\u5927\uff0c\u56e0\u6b64\u4f7f\u7528\u8005\u5728\u4e0b\u8f09\u61c9\u7528\u7a0b\u5f0f\u5230\u88dd\u7f6e\u4e0a\u6642\u8981\u683c\u5916\u5c0f\u5fc3\uff0c\u56e0\u70ba\u5982\u679c\u9047\u5230\u60e1\u610f\u61c9\u7528\u7a0b\u5f0f\uff0c\u5b83\u53ef\u80fd\u6703\u633e\u5e36\u4e00\u500b\u865b\u64ec\u78c1\u789f\u6620\u50cf\u6a94\uff0c\u7136\u5f8c\u5c07\u8a72\u78c1\u789f\u639b\u8f09\u5230\u7cfb\u7d71\u4e0a\u4f86\u89f8\u767c\u524d\u8ff0\u6f0f\u6d1e\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4f7f\u7528\u8005\u53ef\u4e5f\u5b89\u88dd<a href=\"https:\/\/www.trendmicro.com\/en_us\/forHome\/products\/mobile-security.html\">\u8da8\u52e2\u79d1\u6280\u884c\u52d5\u5b89\u5168\u9632\u8b77 (TMMS)<\/a> \u4f86\u5075\u6e2c\u653b\u64ca\u4e0a\u8ff0\u6f0f\u6d1e\u7684\u61c9\u7528\u7a0b\u5f0f\u3002<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\u539f\u6587\u51fa\u8655\uff1a<a href=\"https:\/\/blog.trendmicro.com\/trendlabs-security-intelligence\/vulnerability-f2fs-file-system-leads-memory-corruption-android-linux\/\">Vulnerability in F2FS File System Leads To Memory Corruption on Android, Linux<\/a> \u4f5c\u8005\uff1a<a href=\"https:\/\/blog.trendmicro.com\/trendlabs-security-intelligence\/author\/veozhang\/\">Veo Zhang (\u884c\u52d5\u88dd\u7f6e\u5a01\u8105\u5206\u6790\u5e2b)<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Android \u516b\u6708\u4efd\u5b89\u5168\u6027\u516c\u544a\u5305\u542b\u4e86\u4e09\u500b\u8da8\u52e2\u79d1\u6280\u7814\u7a76\u4eba\u54e1\u767c\u73fe\u7684\u6a94\u6848\u7cfb\u7d71\u6f0f\u6d1e (CVE-2017-10663\u3001 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wpscppro_dont_share_socialmedia":false,"_wpscppro_custom_social_share_image":0,"_facebook_share_type":"","_twitter_share_type":"","_linkedin_share_type":"","_pinterest_share_type":"","_linkedin_share_type_page":"","_instagram_share_type":"","_medium_share_type":"","_threads_share_type":"","_google_business_share_type":"","_selected_social_profile":[],"_wpsp_enable_custom_social_template":false,"_wpsp_social_scheduling":{"enabled":false,"datetime":null,"platforms":[],"status":"template_only","dateOption":"today","timeOption":"now","customDays":"","customHours":"","customDate":"","customTime":"","schedulingType":"absolute"},"_wpsp_active_default_template":true},"categories":[3463,15,156],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=\/wp\/v2\/posts\/51866"}],"collection":[{"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=51866"}],"version-history":[{"count":0,"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=\/wp\/v2\/posts\/51866\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=51866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=51866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.trendmicro.com.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=51866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}