3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux copy_from/to_user原理

發(fā)布時(shí)間:2025/3/21 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux copy_from/to_user原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載地址:http://www.poluoluo.com/server/201107/138420.html

在研究dahdi驅(qū)動(dòng)的時(shí)候,見到了一些get_user,put_user的函數(shù),不知道其來由,故而搜索了這篇文章,前面對(duì)Linux內(nèi)存的框架描述不是很清晰,描述的有一點(diǎn)亂,如果沒有剛性需求,建議不用怎么關(guān)注,倒不如直接看那幾個(gè)圖片。對(duì)我非常有用的地方就是幾個(gè)函數(shù)的介紹,介紹的比較詳細(xì),對(duì)應(yīng)用有需求的可以著重看一個(gè)這幾個(gè)函數(shù)。


Linux 內(nèi)存

  在 Linux 中,用戶內(nèi)存和內(nèi)核內(nèi)存是獨(dú)立的,在各自的地址空間實(shí)現(xiàn)。地址空間是虛擬的,就是說地址是從物理內(nèi)存中抽象出來的(通過一個(gè)簡(jiǎn)短描述的過程)。由于地址空間是虛擬的,所以可以存在很多。事實(shí)上,內(nèi)核本身駐留在一個(gè)地址空間中,每個(gè)進(jìn)程駐留在自己的地址空間。這些地址空間由虛擬內(nèi)存地址組成,允許一些帶有獨(dú)立地址空間的進(jìn)程指向一個(gè)相對(duì)較小的物理地址空間(在機(jī)器的物理內(nèi)存中)。不僅僅是方便,而且更安全。因?yàn)槊總€(gè)地址空間是獨(dú)立且隔離的,因此很安全。

  但是與安全性相關(guān)聯(lián)的成本很高。因?yàn)槊總€(gè)進(jìn)程(和內(nèi)核)會(huì)有相同地址指向不同的物理內(nèi)存區(qū)域,不可能立即共享內(nèi)存。幸運(yùn)的是,有一些解決方案。用戶進(jìn)程可以通過 Portable Operating System Interface for UNIX? (POSIX) 共享的內(nèi)存機(jī)制(shmem)共享內(nèi)存,但有一點(diǎn)要說明,每個(gè)進(jìn)程可能有一個(gè)指向相同物理內(nèi)存區(qū)域的不同虛擬地址。

  虛擬內(nèi)存到物理內(nèi)存的映射通過頁(yè)表完成,這是在底層軟件中實(shí)現(xiàn)的(見圖 1)。硬件本身提供映射,但是內(nèi)核管理表及其配置。注意這里的顯示,進(jìn)程可能有一個(gè)大的地址空間,但是很少見,就是說小的地址空間的區(qū)域(頁(yè)面)通過頁(yè)表指向物理內(nèi)存。這允許進(jìn)程僅為隨時(shí)需要的網(wǎng)頁(yè)指定大的地址空間。

圖 1. 頁(yè)表提供從虛擬地址到物理地址的映射?

  由于缺乏為進(jìn)程定義內(nèi)存的能力,底層物理內(nèi)存被過度使用。通過一個(gè)稱為 paging(然而,在 Linux 中通常稱為 swap)的進(jìn)程,很少使用的頁(yè)面將自動(dòng)移到一個(gè)速度較慢的存儲(chǔ)設(shè)備(比如磁盤),來容納需要被訪問的其它頁(yè)面(見圖 2 )。這一行為允許,在將很少使用的頁(yè)面遷移到磁盤來提高物理內(nèi)存使用的同時(shí),計(jì)算機(jī)中的物理內(nèi)存為應(yīng)用程序更容易需要的頁(yè)面提供服務(wù)。注意,一些頁(yè)面可以指向文件,在這種情況下,如果頁(yè)面是臟(dirty)的,數(shù)據(jù)將被沖洗,如果頁(yè)面是干凈的(clean),直接丟掉。

圖 2. 通過將很少使用的頁(yè)面遷移到速度慢且便宜的存儲(chǔ)器,交換使物理內(nèi)存空間得到了更好的利用?

MMU-less?架構(gòu)

  不是所有的處理器都有 MMU。因此,uClinux 發(fā)行版(微控制器 Linux)支持操作的一個(gè)地址空間。該架構(gòu)缺乏 MMU 提供的保護(hù),但是允許 Linux 運(yùn)行另一類處理器。

  選擇一個(gè)頁(yè)面來交換存儲(chǔ)的過程被稱為一個(gè)頁(yè)面置換算法,可以通過使用許多算法(至少是最近使用的)來實(shí)現(xiàn)。該進(jìn)程在請(qǐng)求存儲(chǔ)位置時(shí)發(fā)生,存儲(chǔ)位置的頁(yè)面不在存儲(chǔ)器中(在存儲(chǔ)器管理單元 [MMU] 中無映射)。這個(gè)事件被稱為一個(gè)頁(yè)面錯(cuò)誤 并被硬件(MMU)刪除,出現(xiàn)頁(yè)面錯(cuò)誤中斷后該事件由防火墻管理。該棧的詳細(xì)說明見 圖 3。

  Linux 提供一個(gè)有趣的交換實(shí)現(xiàn),該實(shí)現(xiàn)提供許多有用的特性。Linux 交換系統(tǒng)允許創(chuàng)建和使用多個(gè)交換分區(qū)和優(yōu)先權(quán),這支持存儲(chǔ)設(shè)備上的交換層次結(jié)構(gòu),這些存儲(chǔ)設(shè)備提供不同的性能參數(shù)(例如,固態(tài)磁盤 [SSD] 上的一級(jí)交換和速度較慢的存儲(chǔ)設(shè)備上的較大的二級(jí)交換)。為 SSD 交換附加一個(gè)更高的優(yōu)先級(jí)使其可以使用直至耗盡;直到那時(shí),頁(yè)面才能被寫入優(yōu)先級(jí)較低的交換分區(qū)。

圖 3. 地址空間和虛擬 - 物理地址映射的元素?

  并不是所有的頁(yè)面都適合交換。考慮到響應(yīng)中斷的內(nèi)核代碼或者管理頁(yè)表和交換邏輯的代碼,顯然,這些頁(yè)面決不能被換出,因此它們是固定的,或者是永久地駐留在內(nèi)存中。盡管內(nèi)核頁(yè)面不需要進(jìn)行交換,然而用戶頁(yè)面需要,但是它們可以被固定,通過 mlock(或 mlockall)函數(shù)來鎖定頁(yè)面。這就是用戶空間內(nèi)存訪問函數(shù)的目的。如果內(nèi)核假設(shè)一個(gè)用戶傳遞的地址是有效的且是可訪問的,最終可能會(huì)出現(xiàn)內(nèi)核嚴(yán)重錯(cuò)誤(kernel panic)(例如,因?yàn)橛脩繇?yè)面被換出,而導(dǎo)致內(nèi)核中的頁(yè)面錯(cuò)誤)。該應(yīng)用程序編程接口(API)確保這些邊界情況被妥善處理。

  內(nèi)核 API

  現(xiàn)在,讓我們來研究一下用戶操作用戶內(nèi)存的內(nèi)核 API。請(qǐng)注意,這涉及內(nèi)核和用戶空間接口,而下一部分將研究其他的一些內(nèi)存 API。用戶空間內(nèi)存訪問函數(shù)在表 1 中列出。

表 1. 用戶空間內(nèi)存訪問 API

函數(shù)描述
access_ok檢查用戶空間內(nèi)存指針的有效性
get_user從用戶空間獲取一個(gè)簡(jiǎn)單變量
put_user輸入一個(gè)簡(jiǎn)單變量到用戶空間
clear_user清除用戶空間中的一個(gè)塊,或者將其歸零。
copy_to_user將一個(gè)數(shù)據(jù)塊從內(nèi)核復(fù)制到用戶空間
copy_from_user將一個(gè)數(shù)據(jù)塊從用戶空間復(fù)制到內(nèi)核
strnlen_user獲取內(nèi)存空間中字符串緩沖區(qū)的大小
strncpy_from_user從用戶空間復(fù)制一個(gè)字符串到內(nèi)核

  正如您所期望的,這些函數(shù)的實(shí)現(xiàn)架構(gòu)是獨(dú)立的。例如在 x86 架構(gòu)中,您可以使用 ./linux/arch/x86/lib/usercopy_32.c 和 usercopy_64.c 中的源代碼找到這些函數(shù)以及在 ./linux/arch/x86/include/asm/uaccess.h 中定義的字符串。

  當(dāng)數(shù)據(jù)移動(dòng)函數(shù)的規(guī)則涉及到復(fù)制調(diào)用的類型時(shí)(簡(jiǎn)單 VS. 聚集),這些函數(shù)的作用如圖 4 所示。

圖 4. 使用 User Space Memory Access API 進(jìn)行數(shù)據(jù)移動(dòng)?

  access_ok 函數(shù)

  您可以使用 access_ok 函數(shù)在您想要訪問的用戶空間檢查指針的有效性。調(diào)用函數(shù)提供指向數(shù)據(jù)塊的開始的指針、塊大小和訪問類型(無論這個(gè)區(qū)域是用來讀還是寫的)。函數(shù)原型定義如下:

access_ok( type, addr, size ); 

  type 參數(shù)可以被指定為 VERIFY_READ 或 VERIFY_WRITE。VERIFY_WRITE 也可以識(shí)別內(nèi)存區(qū)域是否可讀以及可寫(盡管訪問仍然會(huì)生成 -EFAULT)。該函數(shù)簡(jiǎn)單檢查地址可能是在用戶空間,而不是內(nèi)核。

  get_user 函數(shù)

  要從用戶空間讀取一個(gè)簡(jiǎn)單變量,可以使用 get_user 函數(shù),該函數(shù)適用于簡(jiǎn)單數(shù)據(jù)類型,比如,char 和 int,但是像結(jié)構(gòu)體這類較大的數(shù)據(jù)類型,必須使用 copy_from_user 函數(shù)。該原型接受一個(gè)變量(存儲(chǔ)數(shù)據(jù))和一個(gè)用戶空間地址來進(jìn)行 Read 操作:

get_user( x, ptr ); 

  get_user 函數(shù)將映射到兩個(gè)內(nèi)部函數(shù)其中的一個(gè)。在系統(tǒng)內(nèi)部,這個(gè)函數(shù)決定被訪問變量的大小(根據(jù)提供的變量存儲(chǔ)結(jié)果)并通過 __get_user_x 形成一個(gè)內(nèi)部調(diào)用。成功時(shí)該函數(shù)返回 0,一般情況下,get_user 和 put_user 函數(shù)比它們的塊復(fù)制副本要快一些,如果是小類型被移動(dòng)的話,應(yīng)該用它們。

  put_user 函數(shù)

  您可以使用 put_user 函數(shù)來將一個(gè)簡(jiǎn)單變量從內(nèi)核寫入用戶空間。和 get_user 一樣,它接受一個(gè)變量(包含要寫的值)和一個(gè)用戶空間地址作為寫目標(biāo):

put_user( x, ptr ); 

  和 get_user 一樣,put_user 函數(shù)被內(nèi)部映射到 put_user_x 函數(shù),成功時(shí),返回 0,出現(xiàn)錯(cuò)誤時(shí),返回 -EFAULT。

  clear_user 函數(shù)

  clear_user 函數(shù)被用于將用戶空間的內(nèi)存塊清零。該函數(shù)采用一個(gè)指針(用戶空間中)和一個(gè)型號(hào)進(jìn)行清零,這是以字節(jié)定義的:

clear_user( ptr, n ); 

  在內(nèi)部,clear_user 函數(shù)首先檢查用戶空間指針是否可寫(通過 access_ok),然后調(diào)用內(nèi)部函數(shù)(通過內(nèi)聯(lián)組裝方式編碼)來執(zhí)行 Clear 操作。使用帶有 repeat 前綴的字符串指令將該函數(shù)優(yōu)化成一個(gè)非常緊密的循環(huán)。它將返回不可清除的字節(jié)數(shù),如果操作成功,則返回 0。

  copy_to_user 函數(shù)

  copy_to_user 函數(shù)將數(shù)據(jù)塊從內(nèi)核復(fù)制到用戶空間。該函數(shù)接受一個(gè)指向用戶空間緩沖區(qū)的指針、一個(gè)指向內(nèi)存緩沖區(qū)的指針、以及一個(gè)以字節(jié)定義的長(zhǎng)度。該函數(shù)在成功時(shí),返回 0,否則返回一個(gè)非零數(shù),指出不能發(fā)送的字節(jié)數(shù)。

copy_to_user( to, from, n ); 

  檢查了向用戶緩沖區(qū)寫入的功能之后(通過 access_ok),內(nèi)部函數(shù) __copy_to_user 被調(diào)用,它反過來調(diào)用 __copy_from_user_inatomic(在 ./linux/arch/x86/include/asm/uaccess_XX.h 中。其中 XX 是 32 或者 64 ,具體取決于架構(gòu)。)在確定了是否執(zhí)行 1、2 或 4 字節(jié)復(fù)制之后,該函數(shù)調(diào)用 __copy_to_user_ll,這就是實(shí)際工作進(jìn)行的地方。在損壞的硬件中(在 i486 之前,WP 位在管理模式下不可用),頁(yè)表可以隨時(shí)替換,需要將想要的頁(yè)面固定到內(nèi)存,使它們?cè)谔幚頃r(shí)不被換出。i486 之后,該過程只不過是一個(gè)優(yōu)化的副本。

  copy_from_user 函數(shù)

  copy_from_user 函數(shù)將數(shù)據(jù)塊從用戶空間復(fù)制到內(nèi)核緩沖區(qū)。它接受一個(gè)目的緩沖區(qū)(在內(nèi)核空間)、一個(gè)源緩沖區(qū)(從用戶空間)和一個(gè)以字節(jié)定義的長(zhǎng)度。和 copy_to_user 一樣,該函數(shù)在成功時(shí),返回 0 ,否則返回一個(gè)非零數(shù),指出不能復(fù)制的字節(jié)數(shù)。

copy_from_user( to, from, n ); 

  該函數(shù)首先檢查從用戶空間源緩沖區(qū)讀取的能力(通過 access_ok),然后調(diào)用 __copy_from_user,最后調(diào)用 __copy_from_user_ll。從此開始,根據(jù)構(gòu)架,為執(zhí)行從用戶緩沖區(qū)到內(nèi)核緩沖區(qū)的零拷貝(不可用字節(jié))而進(jìn)行一個(gè)調(diào)用。優(yōu)化組裝函數(shù)包含管理功能。

----------------------------------------------------------------------------------------------------------------------------------

copy_to_user分析

在學(xué)習(xí)Linux內(nèi)核驅(qū)動(dòng)的時(shí)候,一開始就會(huì)碰到copy_from_user和copy_to_user這兩個(gè)常用的函數(shù)。這兩個(gè)函數(shù)在內(nèi)核使用的非常頻繁,負(fù)責(zé)將數(shù)據(jù)從用戶空間拷貝到內(nèi)核空間以及將數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間。在4年半前初學(xué)Linux內(nèi)核驅(qū)動(dòng)程序的時(shí)候,我只是知道這個(gè)怎么用,并沒有很深入的分析這兩個(gè)函數(shù)。這次研究?jī)?nèi)核模塊掛載的時(shí)候,又碰到了它們。決定還是認(rèn)真跟蹤一下函數(shù)。
首先這兩個(gè)函數(shù)的原型在arch/arm/include/asm/uaccess.h文件中:
  • static inline unsigned long __must_check copy_from_user(void?*to,?const?void __user?*from,?unsigned long n)
  • {
  • ????if?(access_ok(VERIFY_READ, from, n))
  • ????????n?=?__copy_from_user(to, from, n);
  • ????else?/*?security hole?-?plug it?*/
  • ????????memset(to,?0,?n);
  • ????return n;
  • }

  • static inline unsigned long __must_check copy_to_user(void __user?*to,?const?void?*from,?unsigned long n)
  • {
  • ????if?(access_ok(VERIFY_WRITE, to, n))
  • ????????n?=?__copy_to_user(to, from, n);
  • ????return n;
  • }

  • 這兩個(gè)函數(shù)從結(jié)構(gòu)上來分析,其實(shí)都可以分為兩個(gè)部分: 1、首先檢查用戶空間的地址指針是否有效(難點(diǎn)) 2、調(diào)用__copy_from_user和__copy_to_user函數(shù)
    在這個(gè)分析中,我們先易后難。首先看看具體數(shù)據(jù)拷貝功能的__copy_from_user和__copy_to_user函數(shù)
    對(duì)于ARM構(gòu)架,沒有單獨(dú)實(shí)現(xiàn)這兩個(gè)函數(shù),所以他們的代碼位于include/asm-generic/uaccess.h
  • /*
  • ?*?帶有MMU的構(gòu)架應(yīng)該覆蓋這兩個(gè)函數(shù)
  • ?*/
  • #ifndef __copy_from_user
  • static inline __must_check long __copy_from_user(void?*to,
  • ????????const?void __user?*?from,?unsigned long n)
  • {
  • ????if?(__builtin_constant_p(n))?{
  • ????????switch(n)?{
  • ????????case?1:
  • ????????????*(u8?*)to?=?*(u8 __force?*)from;
  • ????????????return 0;
  • ????????case?2:
  • ????????????*(u16?*)to?=?*(u16 __force?*)from;
  • ????????????return 0;
  • ????????case?4:
  • ????????????*(u32?*)to?=?*(u32 __force?*)from;
  • ????????????return 0;
  • #ifdef CONFIG_64BIT
  • ????????case?8:
  • ????????????*(u64?*)to?=?*(u64 __force?*)from;
  • ????????????return 0;
  • #endif
  • ????????default:
  • ????????????break;
  • ????????}
  • ????}

  • ????memcpy(to,?(const?void __force?*)from,?n);
  • ????return 0;
  • }
  • #endif

  • #ifndef __copy_to_user
  • static inline __must_check long __copy_to_user(void __user?*to,
  • ????????const?void?*from,?unsigned long n)
  • {
  • ????if?(__builtin_constant_p(n))?{
  • ????????switch(n)?{
  • ????????case?1:
  • ????????????*(u8 __force?*)to?=?*(u8?*)from;
  • ????????????return 0;
  • ????????case?2:
  • ????????????*(u16 __force?*)to?=?*(u16?*)from;
  • ????????????return 0;
  • ????????case?4:
  • ????????????*(u32 __force?*)to?=?*(u32?*)from;
  • ????????????return 0;
  • #ifdef CONFIG_64BIT
  • ????????case?8:
  • ????????????*(u64 __force?*)to?=?*(u64?*)from;
  • ????????????return 0;
  • #endif
  • ????????default:
  • ????????????break;
  • ????????}
  • ????}

  • ????memcpy((void __force?*)to,?from,?n);
  • ????return 0;
  • }
  • #endif

  • GCC的內(nèi)建函數(shù) __builtin_constant_p 用于判斷一個(gè)值是否為編譯時(shí)常數(shù),如果參數(shù)值是常數(shù),函數(shù)返回 1,否則返回 0。
  • 從這兩個(gè)函數(shù)中可以看出其實(shí)結(jié)構(gòu)是一樣的,首先看看n是不是常數(shù),如果是并為1、2、4、8(64bit)則直接就用一個(gè)賦值語(yǔ)句拷貝數(shù)據(jù)。如果不是常數(shù)或n過大,則使用memcpy函數(shù)。而這個(gè)memcpy函數(shù)位于lib/string.c:
  • #ifndef __HAVE_ARCH_MEMCPY
  • /**
  • ?*?memcpy?-?Copy one area of memory?to?another
  • ?*?@dest:?Where?to?copy?to
  • ?*?@src:?Where?to?copy from
  • ?*?@count:?The size of the area.
  • ?*
  • ?*?You should?not?use this?function?to?access IO?space,?use memcpy_toio()
  • ?*?or?memcpy_fromio()?instead.
  • ?*/
  • void?*memcpy(void?*dest,?const?void?*src,?size_t count)
  • {
  • ????char?*tmp?=?dest;
  • ????const?char?*s?=?src;

  • ????while?(count--)
  • ????????*tmp++?=?*s++;
  • ????return dest;
  • }
  • EXPORT_SYMBOL(memcpy);
  • #endif
  • 這個(gè)函數(shù)其實(shí)就是一個(gè)簡(jiǎn)單的利用循環(huán)來數(shù)據(jù)拷貝,非常簡(jiǎn)單。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 好了如何拷貝數(shù)據(jù)我們已經(jīng)了解了,現(xiàn)在我們來看看前面的用戶空間指針檢測(cè)函數(shù)access_ok,這其實(shí)是一個(gè)宏定義,位于arch/arm/include/asm/uaccess.h文件中:
  • /* We use 33-bit arithmetic here... */
  • #define __range_ok(addr,size) ({ \
  • unsigned long flag, roksum; \
  • __chk_user_ptr(addr); \
  • __asm__("adds %1, %2, %3; sbcccs %1, %1, %0; movcc %0, #0" \
  • : "=&r" (flag), "=&r" (roksum) \
  • : "r" (addr), "Ir" (size), "0" (current_thread_info()->addr_limit) \
  • : "cc"); \
  • flag; })
  • ......
  • #define access_ok(type,addr,size) (__range_ok(addr,size) == 0)
  • ......
  • 這個(gè)地方使用了GCC內(nèi)聯(lián)匯編,語(yǔ)法大概如下: asm( ? ? 代碼列表 ? ? : 輸出運(yùn)算符列表 ? ? : 輸入運(yùn)算符列表 ? ? : 被更改資源列表 ? ? );

    現(xiàn)在我們來仔細(xì)分析__range_ok這個(gè)宏:

    (1)unsigned long flag, roksum;\\定義兩個(gè)變量


  • flag:保存結(jié)果的變量:非零代表地址無效,零代表地址可以訪問。初始存放非零值(current_thread_info()->addr_limit),也就是當(dāng)前進(jìn)程的地址上限值。
  • roksum:保存要訪問的地址范圍末端,用于和當(dāng)前進(jìn)程地址空間限制數(shù)據(jù)做比較

  • (2)__chk_user_ptr(addr);\\定義是一個(gè)空函數(shù)

    ? ? ?但是這個(gè)函數(shù)涉及到__CHECKER__宏的判斷,__CHECKER__宏在通過Sparse(Semantic Parser for C)工具對(duì)內(nèi)核代碼進(jìn)行檢查時(shí)會(huì)定義的。在使用make C=1或C=2時(shí)便會(huì)調(diào)用該工具,這個(gè)工具可以檢查在代碼中聲明了sparse所能檢查到的相關(guān)屬性的內(nèi)核函數(shù)和變量。

    ? ? 如果定義了__CHECKER__,在網(wǎng)上的資料中這樣解釋的:__chk_user_ptr和__chk_io_ptr在這里只聲明函數(shù),沒有函數(shù)體,目的就是在編譯過程中Sparse能夠捕捉到編譯錯(cuò)誤,檢查參數(shù)的類型。

    ? ? 如果沒有定義__CHECKER__,這就是一個(gè)空函數(shù)。

    (3)接下來的匯編,我適當(dāng)?shù)胤g如下:

    ? ? ?adds %1, %2, %3


    roksum =?addr +?size 這個(gè)操作影響狀態(tài)位(目的是影響是進(jìn)位標(biāo)志C)

    以下的兩個(gè)指令都帶有條件CC,也就是當(dāng)C=0的時(shí)候才執(zhí)行。

    如果上面的加法指令進(jìn)位了(C=1),則以下的指令都不執(zhí)行,flag就為初始值current_thread_info()->addr_limit(非零值),并返回。

    如果沒有進(jìn)位(C=0),就執(zhí)行下面的指令

    ? ? sbcccs %1, %1, %0?

    roksum =?roksum -?flag,也就是(addr +?size)- (current_thread_info()->addr_limit),操作影響符號(hào)位。

    如果(addr +?size)>=(current_thread_info()->addr_limit),則C=1

    如果(addr +?size)<(current_thread_info()->addr_limit),則C=0


    當(dāng)C=0的時(shí)候執(zhí)行以下指令,否則跳過(flag非零)。 ? ??movcc %0, #0 ? ? flag = 0,給flag賦值0

    ?(4)flag;?

    ? ? 返回flag值


    綜上所訴:__range_ok宏其實(shí)等價(jià)于:

    如果(addr +?size)>=(current_thread_info()->addr_limit),返回非零值

    如果(addr +?size)<(current_thread_info()->addr_limit),返回零

    而access_ok就是檢驗(yàn)將要操作的用戶空間的地址范圍是否在當(dāng)前進(jìn)程的用戶地址空間限制中。這個(gè)宏的功能很簡(jiǎn)單,完全可以用C實(shí)現(xiàn),不是必須使用匯編。個(gè)人理解:由于這兩個(gè)函數(shù)使用頻繁,就使用匯編來實(shí)現(xiàn)部分功能來增加效率。


    ? ??從這里再次可以認(rèn)識(shí)到,copy_from_user與copy_to_user的使用是結(jié)合進(jìn)程上下文的,因?yàn)樗麄円L問“user”的內(nèi)存空間,這個(gè)“user”必須是某個(gè)特定的進(jìn)程。通過上面的源碼就知道,其中使用了current_thread_info()來檢查空間是否可以訪問。如果在驅(qū)動(dòng)中使用這兩個(gè)函數(shù),必須是在實(shí)現(xiàn)系統(tǒng)調(diào)用的函數(shù)中使用,不可在實(shí)現(xiàn)中斷處理的函數(shù)中使用。如果在中斷上下文中使用了,那代碼就很可能操作了根本不相關(guān)的進(jìn)程地址空間。

    ? ? 其次由于操作的頁(yè)面可能被換出,這兩個(gè)函數(shù)可能會(huì)休眠,所以同樣不可在中斷上下文中使用。

    用戶進(jìn)程傳來的地址是虛擬地址,這段虛擬地址可能還未真正分配對(duì)應(yīng)的物理地址。對(duì)于用戶進(jìn)程訪問虛擬地址,如果還未分配物理地址,就會(huì)觸發(fā)內(nèi)核缺頁(yè)異常,接著內(nèi)核會(huì)負(fù)責(zé)分配物理地址,并修改映射頁(yè)表。這個(gè)過程對(duì)于用戶進(jìn)程是完全透明的。但是在內(nèi)核空間發(fā)生缺頁(yè)時(shí),必須顯式處理,否則會(huì)導(dǎo)致內(nèi)核oops。


    -----------------------------------------------------------------------------------

    關(guān)于access_ok中的檢查如果(addr +?size)<(current_thread_info()->addr_limit),返回零,閱讀如下內(nèi)容有助于理解

    #include?<linux/kernel.h>
    #include?<linux/module.h>
    #include?<linux/init.h>
    #include?<linux/fs.h>
    #include?<linux/string.h>
    #include?<linux/mm.h>
    #include?<linux/syscalls.h>
    #include?<asm/unistd.h>
    #include?<asm/uaccess.h>

    #define?MY_FILE?"/root/LogFile"

    char?buf[128];
    struct?file?*file?=?NULL;



    static?int?__init init(void)
    {
    ????????mm_segment_t old_fs;
    ????????printk("Hello, I'm the module that intends to write messages to file.\n");


    ????????if(file?==?NULL)
    ????????????????file?=?filp_open(MY_FILE,?O_RDWR?|?O_APPEND?|?O_CREAT,?0644);
    ????????if?(IS_ERR(file))?{
    ????????????????printk("error occured while opening file %s, exiting...\n",?MY_FILE);
    ????????????????return?0;
    ????????}

    ????????sprintf(buf,"%s",?"The Messages.");

    ????????old_fs?=?get_fs();
    ????????set_fs(KERNEL_DS);
    ????????file->f_op->write(file,?(char?*)buf,?sizeof(buf),?&file->f_pos);
    ????????set_fs(old_fs);


    ????????return?0;
    }

    static?void?__exit fini(void)
    {
    ????????if(file?!=?NULL)
    ????????????????filp_close(file,?NULL);
    }

    module_init(init);
    module_exit(fini);
    MODULE_LICENSE("GPL");

    其中:
    ????
    typedef?struct?{
    ?????????unsigned?long?seg;
    ????}?mm_segment_t;

    ????#define?KERNEL_DS????MAKE_MM_SEG(0xFFFFFFFFUL)

    ????#define?MAKE_MM_SEG(s)????((mm_segment_t)?{?(s)?})

    基本思想:
    ???
    一個(gè)是要記得編譯的時(shí)候加上-D__KERNEL_SYSCALLS__ ??
    ? 另外源文件里面要#include ? <linux/unistd.h> ??
    ? 如果報(bào)錯(cuò),很可能是因?yàn)槭褂玫木彌_區(qū)超過了用戶空間的地址范圍。一般系統(tǒng)調(diào)用會(huì)要求你使用的緩沖區(qū)不能在內(nèi)核區(qū)。這個(gè)可以用set_fs()、get_fs()來解決。在讀寫文件前先得到當(dāng)前fs: ??
    ? mm_segment_t ? old_fs=get_fs(); ??
    ? 并設(shè)置當(dāng)前fs為內(nèi)核fs:set_fs(KERNEL_DS); ??
    ? 在讀寫文件后再恢復(fù)原先f(wàn)s: ? set_fs(old_fs); ??
    ? set_fs()、get_fs()等相關(guān)宏在文件include/asm/uaccess.h中定義。 ??
    ? 個(gè)人感覺這個(gè)辦法比較簡(jiǎn)單。 ??
    ? ??
    ? 另外就是用flip_open函數(shù)打開文件,得到struct file *的指針fp。使用指針fp進(jìn)行相應(yīng)操作,如讀文件可以用fp->f_ops->read。最后用filp_close()函數(shù)關(guān)閉文件。 filp_open()、filp_close()函數(shù)在fs/open.c定義,在include/linux/fs.h中聲明。??

    解釋一點(diǎn):
    ????
    系 統(tǒng)調(diào)用本來是提供給用戶空間的程序訪問的,所以,對(duì)傳遞給它的參數(shù)(比如上面的buf),它默認(rèn)會(huì)認(rèn)為來自用戶空間,在->write()函數(shù)中, 為了保護(hù)內(nèi)核空間,一般會(huì)用get_fs()得到的值來和USER_DS進(jìn)行比較,從而防止用戶空間程序“蓄意”破壞內(nèi)核空間;

    ?? 而現(xiàn)在要在內(nèi)核空間使用系統(tǒng)調(diào)用,此時(shí)傳遞給->write()的參數(shù)地址就是內(nèi)核空間的地址了,在USER_DS之上(USER_DS ~ KERNEL_DS),如果不做任何其它處理,在write()函數(shù)中,會(huì)認(rèn)為該地址超過了USER_DS范圍,所以會(huì)認(rèn)為是用戶空間的“蓄意破壞”,從 而不允許進(jìn)一步的執(zhí)行; 為了解決這個(gè)問題; set_fs(KERNEL_DS);將其能訪問的空間限制擴(kuò)大到KERNEL_DS,這樣就可以在內(nèi)核順利使用系統(tǒng)調(diào)用了!

    補(bǔ)充:
    ??? 我看了一下源碼,在include/asm/uaccess.h中,有如下定義:?
    ????#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })?
    ??? #define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFF)?
    ??? #define USER_DS MAKE_MM_SEG(PAGE_OFFSET)?
    ??? #define get_ds() (KERNEL_DS)?
    ??? #define get_fs() (current->addr_limit)?
    ??? #define set_fs(x) (current->addr_limit = (x))?

    而它的注釋也很清楚:?
    /*?
    * The fs value determines whether argument validity checking should be?
    * performed or not. If get_fs() == USER_DS, checking is performed, with?
    * get_fs() == KERNEL_DS, checking is bypassed.?
    *?
    * For historical reasons, these macros are grossly misnamed.?
    */?

    因此可以看到,fs的值是作為是否進(jìn)行參數(shù)檢查的標(biāo)志。系統(tǒng)調(diào)用的參數(shù)要求必須來自用戶空間,所以,當(dāng)在內(nèi)核中使用系統(tǒng)調(diào)用的時(shí)候,set_fs(get_ds())改變了用戶空間的限制,即擴(kuò)大了用戶空間范圍,因此即可使用在內(nèi)核中的參數(shù)了

    ----------------------------------------------------------------------------------------------------

    下文介紹了內(nèi)核處理缺頁(yè)中斷的機(jī)制。 利用異常表處理 Linux 內(nèi)核態(tài)缺頁(yè)異常
    前言
    在程序的執(zhí)行過程中,因?yàn)橛龅侥撤N障礙而使 CPU 無法最終訪問到相應(yīng)的物理內(nèi)存單元,即無法完成從虛擬地址到物理地址映射的時(shí)候,CPU 會(huì)產(chǎn)生一次缺頁(yè)異常,從而進(jìn)行相應(yīng)的缺頁(yè)異常處理。基于 CPU 的這一特性,Linux 采用了請(qǐng)求調(diào)頁(yè)(Demand Paging)和寫時(shí)復(fù)制(Copy On Write)的技術(shù)
    1. 請(qǐng)求調(diào)頁(yè)是一種動(dòng)態(tài)內(nèi)存分配技術(shù),它把頁(yè)框的分配推遲到不能再推遲為止。這種技術(shù)的動(dòng)機(jī)是:進(jìn)程開始運(yùn)行的時(shí)候并不訪問地址空間中的全部?jī)?nèi)容。事實(shí)上,有一部分地址也許永遠(yuǎn)也不會(huì)被進(jìn)程所使用。程序的局部性原理也保證了在程序執(zhí)行的每個(gè)階段,真正使用的進(jìn)程頁(yè)只有一小部分,對(duì)于臨時(shí)用不到的頁(yè),其所在的頁(yè)框可以由其它進(jìn)程使用。因此,請(qǐng)求分頁(yè)技術(shù)增加了系統(tǒng)中的空閑頁(yè)框的平均數(shù),使內(nèi)存得到了很好的利用。從另外一個(gè)角度來看,在不改變內(nèi)存大小的情況下,請(qǐng)求分頁(yè)能夠提高系統(tǒng)的吞吐量。當(dāng)進(jìn)程要訪問的頁(yè)不在內(nèi)存中的時(shí)候,就通過缺頁(yè)異常處理將所需頁(yè)調(diào)入內(nèi)存中。
    2. 寫時(shí)復(fù)制主要應(yīng)用于系統(tǒng)調(diào)用fork,父子進(jìn)程以只讀方式共享頁(yè)框,當(dāng)其中之一要修改頁(yè)框時(shí),內(nèi)核才通過缺頁(yè)異常處理程序分配一個(gè)新的頁(yè)框,并將頁(yè)框標(biāo)記為可寫。這種處理方式能夠較大的提高系統(tǒng)的性能,這和Linux創(chuàng)建進(jìn)程的操作過程有一定的關(guān)系。在一般情況下,子進(jìn)程被創(chuàng)建以后會(huì)馬上通過系統(tǒng)調(diào)用execve將一個(gè)可執(zhí)行程序的映象裝載進(jìn)內(nèi)存中,此時(shí)會(huì)重新分配子進(jìn)程的頁(yè)框。那么,如果fork的時(shí)候就對(duì)頁(yè)框進(jìn)行復(fù)制的話,顯然是很不合適的。
    在上述的兩種情況下出現(xiàn)缺頁(yè)異常,進(jìn)程運(yùn)行于用戶態(tài),異常處理程序可以讓進(jìn)程從出現(xiàn)異常的指令處恢復(fù)執(zhí)行,使用戶感覺不到異常的發(fā)生。當(dāng)然,也會(huì)有異常無法正常恢復(fù)的情況,這時(shí),異常處理程序會(huì)進(jìn)行一些善后的工作,并結(jié)束該進(jìn)程。也就是說,運(yùn)行在用戶態(tài)的進(jìn)程如果出現(xiàn)缺頁(yè)異常,不會(huì)對(duì)操作系統(tǒng)核心的穩(wěn)定性造成影響。 那么對(duì)于運(yùn)行在核心態(tài)的進(jìn)程如果發(fā)生了無法正常恢復(fù)的缺頁(yè)異常,應(yīng)該如何處理呢?是否會(huì)導(dǎo)致系統(tǒng)的崩潰呢?是否能夠解決好內(nèi)核態(tài)缺頁(yè)異常對(duì)于操作系統(tǒng)核心的穩(wěn)定性來說會(huì)產(chǎn)生很大的影響,如果一個(gè)誤操作就會(huì)造成系統(tǒng)的Oops,這對(duì)于用戶來說顯然是不能容忍的 。本文正是針對(duì)這個(gè)問題,介紹了一種Linux內(nèi)核中所采取的解決方法。
    在讀者繼續(xù)往下閱讀之前,有一點(diǎn)需要先說明一下,本文示例中所選的代碼取自于Linux-2.4.0,編譯環(huán)境是gcc-2.96,objdump的版本是2.11.93.0.2,具體的版本信息可以通過以下的命令進(jìn)行查詢:
    $ gcc -v
    Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
    gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)
    $ objdump -v
    GNU objdump 2.11.93.0.2 20020207
    Copyright 2002 Free Software Foundation, Inc.
    回頁(yè)首
    GCC的擴(kuò)展功能
    由于本文中會(huì)用到GCC的擴(kuò)展功能,即匯編器as中提供的.section偽操作,在文章開始之前我再作一個(gè)簡(jiǎn)要的介紹。此偽操作對(duì)于不同的可執(zhí)行文件格式有不同的解釋,我也不一一列舉,僅對(duì)我們所感興趣的Linux中常用的ELF格式的用法加以描述,其指令格式如下:
    .section NAME[, "FLAGS"]
    大家所熟知的C程序一般由以下的幾個(gè)部分組成:代碼段(text section)、初始化數(shù)據(jù)段(data section)、非初始化數(shù)據(jù)段(bss section)、棧(heap)以及堆(stack),具體的地址空間布局可以參考《UNIX環(huán)境高級(jí)編程》一書。
    在Linux內(nèi)核中,通過使用.section的偽操作,可以把隨后的代碼匯編到一個(gè)由NAME指定的段中。而FLAGS字段則說明了該段的屬性,它可以用下面介紹的單個(gè)字符來表示,也可以是多個(gè)字符的組合。
    'a' 可重定位的段
    'w' 可寫段
    'x' 可執(zhí)行段
    'W' 可合并的段
    's' 共享段
    舉個(gè)例子來說明,讀者在后面會(huì)看到的:.section .fixup, "ax"
    這樣的一條指令定義了一個(gè)名為.fixup的段,隨后的指令會(huì)被加入到這個(gè)段中,該段的屬性是可重定位并可執(zhí)行。
    回頁(yè)首
    內(nèi)核缺頁(yè)異常處理
    運(yùn)行在核心態(tài)的進(jìn)程經(jīng)常需要訪問用戶地址空間的內(nèi)容,但是誰(shuí)都無法保證內(nèi)核所得到的這些從用戶空間傳入的地址信息是"合法"的。為了保護(hù)內(nèi)核不受錯(cuò)誤信息的攻擊,需要驗(yàn)證這些從用戶空間傳入的地址信息的正確性。
    在老版本的Linux中,這個(gè)工作是通過函數(shù)verify_area來完成的:
    extern inline int verify_area(int type, const void * addr, unsigned long size)
    該函數(shù)驗(yàn)證了是否可以以type中說明的訪問類型(read or write)訪問從地址addr開始、大小為size的一塊虛擬存儲(chǔ)區(qū)域。為了做到這一點(diǎn),verify_read首先需要找到包含地址addr的虛擬存儲(chǔ)區(qū)域(vma)。一般的情況下(正確運(yùn)行的程序)這個(gè)測(cè)試都會(huì)成功返回,在少數(shù)情況下才會(huì)出現(xiàn)失敗的情況。也就是說,大部分的情況下內(nèi)核在一些無用的驗(yàn)證操作上花費(fèi)了不算短的時(shí)間,這從操作系統(tǒng)運(yùn)行效率的角度來說是不可接受的。
    為了解決這個(gè)問題,現(xiàn)在的Linux設(shè)計(jì)中將驗(yàn)證的工作交給虛存中的硬件設(shè)備來完成。當(dāng)系統(tǒng)啟動(dòng)分頁(yè)機(jī)制以后,如果一條指令的虛擬地址所對(duì)應(yīng)的頁(yè)框(page frame)不在內(nèi)存中或者訪問的類型有錯(cuò)誤,就會(huì)發(fā)生缺頁(yè)異常。處理器把引起缺頁(yè)異常的虛擬地址裝到寄存器CR2中,并提供一個(gè)出錯(cuò)碼,指示引起缺頁(yè)異常的存儲(chǔ)器訪問的類型,隨后調(diào)用Linux的缺頁(yè)異常處理函數(shù)進(jìn)行處理。
    Linux中進(jìn)行缺頁(yè)異常處理的函數(shù)如下:
    asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long error_code)
    {
    ……………………
    __asm__("movl %%cr2,%0":"=r" (address));
    ……………………
    vma = find_vma(mm, address);
    if (!vma)
    goto bad_area;
    if (vma->vm_start <= address)
    goto good_area;
    if (!(vma->vm_flags & VM_GROWSDOWN))
    goto bad_area;
    if (error_code & 4) {
    if (address + 32 < regs->esp)
    goto bad_area;
    ……………………
    bad_area:
    ……………………
    no_context:
    /* Are we prepared to handle this kernel fault? ?*/
    if ((fixup = search_exception_table(regs->eip)) != 0) {
    regs->eip = fixup;
    return;
    }
    ………………………
    }
    首先讓我們來看看傳給這個(gè)函數(shù)調(diào)用的兩個(gè)參數(shù):它們都是通過entry.S在堆棧中建立的(arch/i386/kernel/entry.S),參數(shù)regs指向保存在堆棧中的寄存器,error_code中存放著異常的出錯(cuò)碼,具體的堆棧布局參見圖一(堆棧的生成過程請(qǐng)參考《Linux內(nèi)核源代碼情景分析》一書)


    該函數(shù)首先從CPU的控制寄存器CR2中獲取出現(xiàn)缺頁(yè)異常的虛擬地址。由于缺頁(yè)異常處理程序需要處理的缺頁(yè)異常類型很多,分支也很復(fù)雜。基于本文的主旨,我們只關(guān)心以下的幾種內(nèi)核缺頁(yè)異常處理的情況:
    1. 程序要訪問的內(nèi)核地址空間的內(nèi)容不在內(nèi)存中,先跳轉(zhuǎn)到標(biāo)號(hào)vmalloc_fault,如果當(dāng)前訪問的內(nèi)容所對(duì)應(yīng)的頁(yè)目錄項(xiàng)不在內(nèi)存中,再跳轉(zhuǎn)到標(biāo)號(hào)no_context;
    2. 缺頁(yè)異常發(fā)生在中斷或者內(nèi)核線程中,跳轉(zhuǎn)到標(biāo)號(hào)no_context;
    3. 程序在核心態(tài)運(yùn)行時(shí)訪問用戶空間的數(shù)據(jù),被訪問的數(shù)據(jù)不在內(nèi)存中
    a) 出現(xiàn)異常的虛擬地址在進(jìn)程的某個(gè)vma中,但是系統(tǒng)內(nèi)存無法分配空閑頁(yè)框(page frame),則先跳轉(zhuǎn)到標(biāo)號(hào)out_of_memory,再跳轉(zhuǎn)到標(biāo)號(hào)no_context;
    b) 出現(xiàn)異常的虛擬地址不屬于進(jìn)程任一個(gè)vma,而且不屬于堆棧擴(kuò)展的范疇,則先跳轉(zhuǎn)到標(biāo)號(hào)bad_area,最終也是到達(dá)標(biāo)號(hào)no_context。
    從上面的這幾種情況來看,我們關(guān)注的焦點(diǎn)最后集中到標(biāo)號(hào)no_context處,即對(duì)函數(shù)search_exception_table的調(diào)用。這個(gè)函數(shù)的作用就是通過發(fā)生缺頁(yè)異常的指令(regs->eip)在異常表(exception table)中尋找下一條可以繼續(xù)運(yùn)行的指令(fixup)。這里提到的異常表包含一些地址對(duì),地址對(duì)中的前一個(gè)地址表示出現(xiàn)異常的指令的地址,后一個(gè)表示當(dāng)前一個(gè)指令出現(xiàn)錯(cuò)誤時(shí),程序可以繼續(xù)得以執(zhí)行的修復(fù)地址。
    如果這個(gè)查找操作成功的話,缺頁(yè)異常處理程序?qū)⒍褩V械姆祷氐刂?#xff08;regs->eip)修改成修復(fù)地址并返回,隨后,發(fā)生異常的進(jìn)程將按照fixup中安排好的指令繼續(xù)執(zhí)行下去。當(dāng)然,如果無法找到與之匹配的修復(fù)地址,系統(tǒng)只有打印出出錯(cuò)信息并停止運(yùn)作。
    那么,這個(gè)所謂的修復(fù)地址又是如何生成的呢?是系統(tǒng)自動(dòng)生成的嗎?答案當(dāng)然是否定的,這些修復(fù)指令都是編程人員通過as提供的擴(kuò)展功能寫進(jìn)內(nèi)核源碼中的。下面我們就來分析一下其實(shí)現(xiàn)機(jī)制。
    回頁(yè)首
    異常表的實(shí)現(xiàn)機(jī)制
    筆者取include/asm-i386/uaccess.h中的宏定義__copy_user編寫了一段程序作為例子加以講解。
    /* hello.c */
    #include <stdio.h>
    #include <string.h>
    #define __copy_user(to,from,size) \
    do { \
    int __d0, __d1;\
    __asm__ __volatile__(\
    "0: rep; movsl\n"\
    " movl %3,%0\n"\
    "1: rep; movsb\n"\
    "2:\n" ?\
    ".section .fixup,\"ax\"\n"\
    "3: lea 0(%3,%0,4),%0\n"\
    " jmp 2b\n"\
    ".previous\n" ?\
    ".section __ex_table,\"a\"\n"\
    " .align 4\n"? ? ? ?\
    " .long 0b,3b\n"\
    " .long 1b,2b\n"\
    ".previous" ?\
    : "=&c"(size), "=&D" (__d0), "=&S" (__d1)\
    : "r"(size & 3), "0"(size / 4), "1"(to), "2"(from)\
    : "memory"); ?\
    } while (0)
    int main(void)
    {
    const char*string = "Hello, world!";
    char buf[20];
    unsigned long ?n, m;
    m = n = strlen(string);
    __copy_user(buf, string, n);
    buf[m] = '\0';
    printf("%s\n", buf);
    exit(0);
    }
    先看看本程序的執(zhí)行結(jié)果:
    $ gcc hello.c -o hello
    $ ./hello
    Hello, world!
    顯然,這就是一個(gè)簡(jiǎn)單的"hello world"程序,那為什么要寫得這么復(fù)雜呢?程序中的一大段匯編代碼在內(nèi)核中才能體現(xiàn)出其價(jià)值,筆者將其加入到上面的程序中,是為了后面的分析而準(zhǔn)備的。
    系統(tǒng)在核心態(tài)運(yùn)行的時(shí)候,參數(shù)是通過寄存器來傳遞的,由于寄存器所能夠傳遞的信息有限,所以傳遞的參數(shù)大多數(shù)是指針。要使用指針?biāo)赶虻母髩K的數(shù)據(jù),就需要將用戶空間的數(shù)據(jù)拷貝到系統(tǒng)空間來。上面的__copy_user在內(nèi)核中正是扮演著這樣的一個(gè)拷貝數(shù)據(jù)的角色,當(dāng)然,內(nèi)核中這樣的宏定義還很多,筆者也只是取其中的一個(gè)來講解,讀者如果感興趣的話可以看完本文以后自行學(xué)習(xí)。
    如果讀者對(duì)于簡(jiǎn)單的嵌入式匯編還不是很了解的話,可以參考《Linux內(nèi)核源代碼情景分析》一書。下面我們將程序編譯成匯編程序來加以分析:
    $ gcc -S hello.c
    /* hello.s */
    movl -60(%ebp), %eax
    andl $3, %eax
    movl -60(%ebp), %edx
    movl %edx, %ecx
    shrl $2, %ecx
    leal -56(%ebp), %edi
    movl -12(%ebp), %esi
    #APP
    0: rep; movsl
    movl %eax,%ecx
    1: rep; movsb
    2:
    .section .fixup,"ax"
    3: lea 0(%eax,%ecx,4),%ecx
    jmp 2b
    .previous
    .section __ex_table,"a"
    .align 4
    .long 0b,3b
    .long 1b,2b
    .previous
    #NO_APP
    movl %ecx, %eax
    從上面通過gcc生成的匯編程序中,我們可以很容易的找到訪問用戶地址空間的指令,也就是程序中的標(biāo)號(hào)為0和1的兩條語(yǔ)句。而程序中偽操作.section的作用就是定義了.fixup和__ex_table這樣的兩個(gè)段,那么這兩段在可執(zhí)行程序中又是如何安排的呢?下面就通過objdump給讀者一個(gè)直觀的概念:
    ? ? ? ? ? ? ? ? ? $ objdump --section-headers hello
    hello: ? ? file format elf32-i386
    Sections:
    Idx Name ? ? ? ? ?Size ? ? ?VMA ? ? ? LMA ? ? ? File off ?Algn
    ? 0 .interp ? ? ? 00000013 ?080480f4 ?080480f4 ?000000f4 ?2**0
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, DATA
    ………………………………
    ? 9 .init ? ? ? ? 00000018 ?080482e0 ?080482e0 ?000002e0 ?2**2
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, CODE
    ?10 .plt ? ? ? ? ?00000070 ?080482f8 ?080482f8 ?000002f8 ?2**2
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, CODE
    ?11 .text ? ? ? ? 000001c0 ?08048370 ?08048370 ?00000370 ?2**4
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, CODE
    ?12 .fixup ? ? ? ?00000009 ?08048530 ?08048530 ?00000530 ?2**0
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, CODE
    ?13 .fini ? ? ? ? 0000001e ?0804853c ?0804853c ?0000053c ?2**2
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, CODE
    ?14 .rodata ? ? ? 00000019 ?0804855c ?0804855c ?0000055c ?2**2
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, DATA
    ?15 __ex_table ? ?00000010 ?08048578 ?08048578 ?00000578 ?2**2
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, READONLY, DATA
    ?16 .data ? ? ? ? 00000010 ?08049588 ?08049588 ?00000588 ?2**2
    ? ? ? ? ? ? ? ? ? CONTENTS, ALLOC, LOAD, DATA
    ? ? ? ? ? ? ? ? ? CONTENTS, READONLY
    ………………………………
    ?26 .note ? ? ? ? 00000078 ?00000000 ?00000000 ?0000290d ?2**0
    ? ? ? ? ? ? ? ? ? CONTENTS, READONLY
    上面通過objdump顯示出來的可執(zhí)行程序的頭部信息中,有一些是讀者所熟悉的,例如.text、.data以及被筆者省略掉的.bss,而我們所關(guān)心的是12和15,也就是.fixup和__ex_table。對(duì)照hello.s中段的定義來看,兩個(gè)段聲明中的FLAGS字段分別為'ax'和'a',而objdump的結(jié)果顯示,.fixup段是可重定位的代碼段,__ex_table段是可重定位的數(shù)據(jù)段,兩者是吻合的。
    那么為什么要通過.section定義獨(dú)立的段呢?為了解開這個(gè)問題的答案,我們需要進(jìn)一步看看我們所寫的代碼在可執(zhí)行文件中是如何表示的。
    $objdump --disassemble --section=.text hello
    hello: ? ? file format elf32-i386
    Disassembly of section .text:
    8048498: 8b 45 c4 ? ? ? ? ? ??mov ? ? 0xffffffc4(%ebp),%eax
    804849b: 83 e0 03 ? ? ? ? ? ??and ? ??$0x3,%eax
    804849e: 8b 55 c4 ? ? ? ? ? ??mov ? ? 0xffffffc4(%ebp),%edx
    80484a1: 89 d1 ? ? ? ? ? ? ??mov ? ? %edx,%ecx
    80484a3: c1 e9 02 ? ? ? ? ? ??shr ? ??$0x2,%ecx
    80484a6: 8d 7d c8 ? ? ? ? ? ??lea ? ??0xffffffc8(%ebp),%edi
    80484a9: 8b 75 f4 ? ? ? ? ? ??mov ? ? 0xfffffff4(%ebp),%esi
    80484ac: f3 a5 ? ? ? ? ? ? ??repz movsl?%ds:(%esi),%es:(%edi)
    80484ae: 89 c1 ? ? ? ? ? ? ??mov ? ? %eax,%ecx
    80484b0: f3 a4 ? ? ? ? ? ? ??repz movsb?%ds:(%esi),%es:(%edi)
    80484b2: 89 c8 ? ? ? ? ? ? ??mov ? ? %ecx,%eax
    前面的hello.s中的匯編片斷在可執(zhí)行文件中就是通過上面的11條指定來表達(dá),讀者也許會(huì)問,由.section偽操作定義的段怎么不見了?別著急,慢慢往下看,由.section偽操作定義的段并不在正常的程序執(zhí)行路徑上,它們是被安排在可執(zhí)行文件的其它地方了:
    $objdump --disassemble --section=.fixup hello
    hello: ? ? file format elf32-i386
    Disassembly of section .fixup:
    08048530 <.fixup>:
    8048530: 8d 4c 88 00 ? ? ? ? ?lea ? ?0x0(%eax,%ecx,4),%ecx
    8048534: e9 79 ff ff ff ? ? ??jmp ? ?80484b2 <main+0x42>
    由此可見,.fixup是作為一個(gè)單獨(dú)的段出現(xiàn)在可執(zhí)行程序中的,而此段中所包含的語(yǔ)句則正好是和源程序hello.c中的兩條語(yǔ)句相對(duì)應(yīng)的。
    將.fixup段和.text段獨(dú)立開來的目的是為了提高CPU流水線的利用率。熟悉體系結(jié)構(gòu)的讀者應(yīng)該知道,當(dāng)前的CPU引入了流水線技術(shù)來加快指令的執(zhí)行,即在執(zhí)行當(dāng)前指令的同時(shí),要將下面的一條甚至多條指令預(yù)取到流水線中。這種技術(shù)在面對(duì)程序執(zhí)行分支的時(shí)候遇到了問題:如果預(yù)取的指令并不是程序下一步要執(zhí)行的分支,那么流水線中的所有指令都要被排空,這對(duì)系統(tǒng)的性能會(huì)產(chǎn)生一定的影響。在我們的這個(gè)程序中,如果將.fixup段的指令安排在正常執(zhí)行的.text段中,當(dāng)程序執(zhí)行到前面的指令時(shí),這幾條很少執(zhí)行的指令會(huì)被預(yù)取到流水線中,正常的執(zhí)行必然會(huì)引起流水線的排空操作,這顯然會(huì)降低整個(gè)系統(tǒng)的性能。
    下面我們就可以看到異常表是如何形成的了:
    $objdump --full-contents --section=__ex_table hello
    hello: ? ? file format elf32-i386
    Contents of section __ex_table:
    8048578 ac840408 30850408 b0840408 b2840408 ?....0...........
    由于x86使用小尾端的編址方式,上面的這段數(shù)據(jù)比較凌亂。讓我把上面的__ex_table中的內(nèi)容轉(zhuǎn)變成大家通常看到的樣子,相信會(huì)更容易理解一些:
    8048578 80484ac 8048530 80484b0 80484b2 ?....0...........
    上面的紅色部分就是我們最感興趣的地方,而這段數(shù)據(jù)是如何形成的呢?將前面objdump生成的可執(zhí)行程序中的匯編語(yǔ)句和hello.c中的源程序結(jié)合起來看,就可以發(fā)現(xiàn)一些有趣的東西了!
    先讓我們回頭看看hello.c中__ex_table段的語(yǔ)句 .long 0b,3b。其中標(biāo)簽0b(b代表backward,即往回的標(biāo)簽0)是可能出現(xiàn)異常的指令的地址。結(jié)合objdump生成的可執(zhí)行程序.text段的匯編語(yǔ)句可以知道標(biāo)簽0就是80484ac:
    原始的匯編語(yǔ)句: 0: ?rep; movsl
    鏈接到可執(zhí)行程序后: 80484ac:f3 a5 repz movsl %ds:(%esi),%es:(%edi)
    而標(biāo)簽3就是處理異常的指令的地址,在我們的這個(gè)例子中就是80484b0:
    原始的匯編語(yǔ)句: 3: ?lea 0(%eax,%ecx,4),%ecx
    鏈接到可執(zhí)行程序后: 8048530:8d 4c 88 00 lea 0x0(%eax,%ecx,4),%ecx
    因此,相應(yīng)的匯編語(yǔ)句
    .section __ex_table,"a"
    .align 4
    .long 0b,3b
    就變成了: 8048578 80484ac 8048530 …………
    這樣,異常表中的地址對(duì)(80484ac,8048530)就誕生了,而對(duì)于地址對(duì)(80484b0 80484b2)的生成,情況相同,不再贅述。
    讀到這兒了,有一件事要告訴讀者的是,其實(shí)例子中異常表的安排在用戶空間是不會(huì)得到執(zhí)行的。當(dāng)運(yùn)行在用戶態(tài)的進(jìn)程訪問到標(biāo)簽0處的指令出現(xiàn)缺頁(yè)異常時(shí),do_page_fault只會(huì)將該指令對(duì)應(yīng)的進(jìn)程頁(yè)調(diào)入內(nèi)存中,使指令能夠重新正確執(zhí)行,或者直接就殺死該進(jìn)程,并不會(huì)到達(dá)函數(shù)search_exception_table處。
    也許有的讀者會(huì)問了,既然不執(zhí)行,前面的例子和圍繞例子所展開的討論又有什么作用呢?大家大可打消這樣的疑慮,我們前面的分析并沒有白費(fèi),因?yàn)檎嬲膬?nèi)核異常表中地址對(duì)的生成機(jī)制和前面講述的原理是完全一樣的,筆者通過一個(gè)運(yùn)行在用戶空間的程序來講解也是希望讓讀者能夠更加容易的理解異常表的機(jī)制,不至于陷入到內(nèi)核源碼的汪洋大海中去。現(xiàn)在,我們可以自己通過objdump工具查看一下內(nèi)核中的異常表:
    $objdump --full-contents --section=__ex_table vmlinux
    vmlinux: ? ? file format elf32-i386
    Contents of section __ex_table:
    c024ac80 e36d10c0 e66d10c0 8b7110c0 6c7821c0
    ……………………
    做一下轉(zhuǎn)化:
    c024ac80 c0106de3 c0106de6 c010718b c021786c
    上面的vmlinux就是編譯內(nèi)核所生成的內(nèi)核可執(zhí)行程序。和本文給出的例子相比,唯一的不同就是此時(shí)的地址對(duì)中的異常指令地址和修復(fù)地址都是內(nèi)核空間的虛擬地址。也正是在內(nèi)核中,異常表才真正發(fā)揮著它應(yīng)有的作用。
    回頁(yè)首
    總結(jié)
    下面我對(duì)前面所講述的內(nèi)容做一個(gè)歸納,希望讀者能夠?qū)?nèi)核缺頁(yè)異常處理有一個(gè)清楚的認(rèn)識(shí):
    進(jìn)程訪問內(nèi)核地址空間的"非法"地址c010718b
    存儲(chǔ)管理部件(MMU)產(chǎn)生一個(gè)缺頁(yè)異常;
    CPU調(diào)用函數(shù)do_page_fault;
    do_page_fault調(diào)用函數(shù)search_exception_table(regs->eip == c010718b);
    search_exception_table在異常表中查找地址c010718b,并返回地址對(duì)中的修復(fù)地址c021786c;
    do_page_fault將堆棧中的返回地址eip修改成c021786c并返回;
    代碼按照缺頁(yè)異常處理程序的返回地址繼續(xù)執(zhí)行,也就是從c021786c開始繼續(xù)執(zhí)行。
    將驗(yàn)證用戶空間地址信息"合法"性的工作交給硬件來完成(通過缺頁(yè)異常的方式)其實(shí)就是一種Lazy Computation,也就是等到真正出現(xiàn)缺頁(yè)異常的時(shí)候才進(jìn)行處理。通過本文的分析可以看出,這種方法與本文前面所提到的通過verify_area來驗(yàn)證的方法相比,較好的避免了系統(tǒng)在無用驗(yàn)證上的開銷,能夠有效的提高系統(tǒng)的性能。 此外,在分析源碼的過程中讀者會(huì)發(fā)現(xiàn),異常表并不僅僅用在缺頁(yè)異常處理程序中,在通用保護(hù)(General Protection)異常等地方,也同樣用到了這一技術(shù)。
    由此可見,異常表是一種廣泛應(yīng)用于Linux內(nèi)核中的異常處理方法。在系統(tǒng)軟件的設(shè)計(jì)中,異常表也應(yīng)該成為一種提高系統(tǒng)穩(wěn)定性的重要手段

    總結(jié)

    以上是生活随笔為你收集整理的linux copy_from/to_user原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    日韩av无码中文无码电影 | 2019nv天堂香蕉在线观看 | 88国产精品欧美一区二区三区 | 国产卡一卡二卡三 | 久久午夜夜伦鲁鲁片无码免费 | 高潮毛片无遮挡高清免费视频 | 日本肉体xxxx裸交 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲一区二区观看播放 | 亚洲男女内射在线播放 | 亚洲一区二区三区香蕉 | 亚洲成av人影院在线观看 | 国产成人精品一区二区在线小狼 | 亚洲阿v天堂在线 | 亚洲综合无码一区二区三区 | 亚洲 激情 小说 另类 欧美 | 国产成人无码午夜视频在线观看 | 无遮挡国产高潮视频免费观看 | 国产精品鲁鲁鲁 | 欧美日韩久久久精品a片 | 午夜熟女插插xx免费视频 | 丰满少妇女裸体bbw | 亚洲s色大片在线观看 | 美女黄网站人色视频免费国产 | 国产国产精品人在线视 | 少妇无套内谢久久久久 | 免费乱码人妻系列无码专区 | 国产精品久久久久久亚洲影视内衣 | 天天拍夜夜添久久精品大 | 亚洲狠狠色丁香婷婷综合 | 强奷人妻日本中文字幕 | 色综合天天综合狠狠爱 | 亚洲中文字幕无码中文字在线 | 国产亚洲人成a在线v网站 | 噜噜噜亚洲色成人网站 | 婷婷丁香五月天综合东京热 | 丰满少妇女裸体bbw | 99久久精品日本一区二区免费 | 久久亚洲日韩精品一区二区三区 | 免费男性肉肉影院 | аⅴ资源天堂资源库在线 | 国产97人人超碰caoprom | 国产激情无码一区二区 | 久久久精品欧美一区二区免费 | 欧美成人家庭影院 | 国产成人综合美国十次 | 成人免费视频一区二区 | 中文毛片无遮挡高清免费 | 精品乱码久久久久久久 | 精品久久久久久人妻无码中文字幕 | 精品成在人线av无码免费看 | 日韩av无码中文无码电影 | 欧美人与牲动交xxxx | 老子影院午夜伦不卡 | 久热国产vs视频在线观看 | 久久精品国产亚洲精品 | 清纯唯美经典一区二区 | 大地资源中文第3页 | 亚洲成a人片在线观看无码 | 最新国产乱人伦偷精品免费网站 | 无码国产激情在线观看 | 成人性做爰aaa片免费看 | 夫妻免费无码v看片 | 欧洲欧美人成视频在线 | 亚洲阿v天堂在线 | 女人被男人爽到呻吟的视频 | 欧洲熟妇精品视频 | 中文字幕人妻无码一区二区三区 | 精品国产青草久久久久福利 | 一本色道久久综合狠狠躁 | 欧美人与牲动交xxxx | 中文字幕+乱码+中文字幕一区 | 人妻少妇精品视频专区 | 国产性生大片免费观看性 | 美女张开腿让人桶 | 99精品视频在线观看免费 | 国产在线精品一区二区高清不卡 | 内射欧美老妇wbb | 国产黑色丝袜在线播放 | 国产精品久久久av久久久 | 天天摸天天透天天添 | 精品 日韩 国产 欧美 视频 | 377p欧洲日本亚洲大胆 | 亚洲va中文字幕无码久久不卡 | 人妻夜夜爽天天爽三区 | 未满成年国产在线观看 | 少妇无码av无码专区在线观看 | 国产成人无码区免费内射一片色欲 | 国产亲子乱弄免费视频 | 中文无码成人免费视频在线观看 | 国产香蕉尹人视频在线 | 大地资源中文第3页 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品亚洲专区无码不卡 | 高清国产亚洲精品自在久久 | 特大黑人娇小亚洲女 | 丝袜 中出 制服 人妻 美腿 | 久久亚洲精品中文字幕无男同 | 东京热男人av天堂 | 动漫av一区二区在线观看 | 亚洲成av人片在线观看无码不卡 | 无码国产激情在线观看 | 国产精品久久久久无码av色戒 | 国产无套内射久久久国产 | 色狠狠av一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 国产精品永久免费视频 | 国产无遮挡吃胸膜奶免费看 | 青青草原综合久久大伊人精品 | 国产无遮挡又黄又爽免费视频 | 亚洲精品国产品国语在线观看 | 熟妇人妻中文av无码 | 国产女主播喷水视频在线观看 | 97久久超碰中文字幕 | 未满小14洗澡无码视频网站 | 欧美35页视频在线观看 | av无码不卡在线观看免费 | 欧美放荡的少妇 | 午夜不卡av免费 一本久久a久久精品vr综合 | 四虎影视成人永久免费观看视频 | 国产精品沙发午睡系列 | 99久久精品午夜一区二区 | 国产极品视觉盛宴 | 精品久久久中文字幕人妻 | 久久综合久久自在自线精品自 | 日韩在线不卡免费视频一区 | 乱码av麻豆丝袜熟女系列 | 一本色道久久综合亚洲精品不卡 | 无码人妻精品一区二区三区下载 | 亚洲精品中文字幕久久久久 | 99精品无人区乱码1区2区3区 | 精品无码一区二区三区的天堂 | 国产精品久久久久影院嫩草 | 国内少妇偷人精品视频免费 | 一本加勒比波多野结衣 | 亚洲国产欧美日韩精品一区二区三区 | 中文字幕日产无线码一区 | 西西人体www44rt大胆高清 | 欧洲欧美人成视频在线 | 四虎4hu永久免费 | 欧美一区二区三区视频在线观看 | 人妻少妇精品视频专区 | 亚洲成在人网站无码天堂 | 又大又黄又粗又爽的免费视频 | 玩弄少妇高潮ⅹxxxyw | 久久精品99久久香蕉国产色戒 | 国产精品毛多多水多 | 免费乱码人妻系列无码专区 | 真人与拘做受免费视频一 | 日欧一片内射va在线影院 | 人妻无码αv中文字幕久久琪琪布 | 麻豆精品国产精华精华液好用吗 | 国产免费无码一区二区视频 | 亚洲aⅴ无码成人网站国产app | 福利一区二区三区视频在线观看 | 无码人妻精品一区二区三区不卡 | 日本一本二本三区免费 | 久久综合网欧美色妞网 | 亚洲熟妇色xxxxx欧美老妇 | 性开放的女人aaa片 | 久久人人97超碰a片精品 | 综合人妻久久一区二区精品 | 亚洲熟女一区二区三区 | 99国产精品白浆在线观看免费 | 少妇性l交大片欧洲热妇乱xxx | 99久久99久久免费精品蜜桃 | 亚洲日韩中文字幕在线播放 | 波多野结衣av一区二区全免费观看 | 中文字幕乱妇无码av在线 | 亚洲va中文字幕无码久久不卡 | 国产精品99久久精品爆乳 | 少妇人妻偷人精品无码视频 | 无码成人精品区在线观看 | 精品久久久久久亚洲精品 | 久久精品成人欧美大片 | 国产亚av手机在线观看 | 少妇高潮喷潮久久久影院 | 丰满妇女强制高潮18xxxx | 奇米影视888欧美在线观看 | 无码国产乱人伦偷精品视频 | 98国产精品综合一区二区三区 | 成人无码影片精品久久久 | √天堂中文官网8在线 | 久久亚洲a片com人成 | 亚洲中文字幕久久无码 | 国产人成高清在线视频99最全资源 | 狂野欧美性猛交免费视频 | 国产偷抇久久精品a片69 | 精品国偷自产在线 | 无遮无挡爽爽免费视频 | 国产一区二区三区影院 | 亚洲日本va午夜在线电影 | 天天摸天天碰天天添 | 在线观看国产一区二区三区 | 国产猛烈高潮尖叫视频免费 | 欧美成人午夜精品久久久 | 青春草在线视频免费观看 | 久久人人爽人人爽人人片av高清 | 超碰97人人射妻 | 国产成人一区二区三区在线观看 | 久久午夜无码鲁丝片秋霞 | 亚洲综合无码久久精品综合 | 久久久久久国产精品无码下载 | 内射白嫩少妇超碰 | √天堂中文官网8在线 | 久久国产精品_国产精品 | 国产亚av手机在线观看 | 97资源共享在线视频 | 少妇人妻偷人精品无码视频 | 日韩av无码一区二区三区 | 又紧又大又爽精品一区二区 | 天天躁日日躁狠狠躁免费麻豆 | 丝袜人妻一区二区三区 | 日韩在线不卡免费视频一区 | 少妇愉情理伦片bd | 樱花草在线播放免费中文 | 帮老师解开蕾丝奶罩吸乳网站 | 免费无码午夜福利片69 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久 国产 尿 小便 嘘嘘 | 无码午夜成人1000部免费视频 | 成人一区二区免费视频 | 色欲综合久久中文字幕网 | 中文字幕无码视频专区 | 日韩精品久久久肉伦网站 | 亚洲 高清 成人 动漫 | 永久免费精品精品永久-夜色 | 日韩欧美群交p片內射中文 | 国产人妖乱国产精品人妖 | 5858s亚洲色大成网站www | 欧洲vodafone精品性 | 欧美日韩色另类综合 | 午夜丰满少妇性开放视频 | 精品人人妻人人澡人人爽人人 | 女高中生第一次破苞av | 亚洲精品国偷拍自产在线麻豆 | 国产9 9在线 | 中文 | 精品久久久久久人妻无码中文字幕 | 熟女俱乐部五十路六十路av | 亚洲一区二区三区四区 | 精品熟女少妇av免费观看 | 小sao货水好多真紧h无码视频 | 久久久久久久女国产乱让韩 | 中文字幕无码视频专区 | 午夜福利电影 | 大屁股大乳丰满人妻 | 色婷婷综合中文久久一本 | 亚洲精品中文字幕乱码 | 精品一区二区不卡无码av | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲一区av无码专区在线观看 | 久久五月精品中文字幕 | 国产亚洲欧美日韩亚洲中文色 | 伊人久久大香线蕉亚洲 | 夜夜夜高潮夜夜爽夜夜爰爰 | 熟女少妇人妻中文字幕 | 亚洲成a人片在线观看无码3d | a国产一区二区免费入口 | 大色综合色综合网站 | 中文字幕色婷婷在线视频 | 久久精品视频在线看15 | 国产69精品久久久久app下载 | 久久人妻内射无码一区三区 | 亚洲综合无码一区二区三区 | 国产精品福利视频导航 | 色综合久久久无码网中文 | 亚洲国产精品久久久天堂 | 国产成人久久精品流白浆 | 久久国产36精品色熟妇 | 亚洲色欲色欲天天天www | 在线看片无码永久免费视频 | 无码成人精品区在线观看 | 一本色道久久综合亚洲精品不卡 | 狂野欧美性猛交免费视频 | 久久99精品国产麻豆蜜芽 | 啦啦啦www在线观看免费视频 | 少妇的肉体aa片免费 | 精品国产福利一区二区 | 国产极品美女高潮无套在线观看 | 国产成人精品久久亚洲高清不卡 | 国模大胆一区二区三区 | 日韩人妻无码中文字幕视频 | 欧美大屁股xxxxhd黑色 | 巨爆乳无码视频在线观看 | 久久久久久九九精品久 | 国产成人人人97超碰超爽8 | 亚洲精品中文字幕久久久久 | 精品无人区无码乱码毛片国产 | 亚洲精品美女久久久久久久 | 国产小呦泬泬99精品 | 天堂久久天堂av色综合 | 亚洲日韩精品欧美一区二区 | 高潮喷水的毛片 | 国产午夜手机精彩视频 | 欧美高清在线精品一区 | 亚洲色欲色欲天天天www | 性欧美熟妇videofreesex | 国产精品久久久av久久久 | 麻豆国产人妻欲求不满 | 99精品视频在线观看免费 | 国产精品美女久久久久av爽李琼 | 国产两女互慰高潮视频在线观看 | 一本色道婷婷久久欧美 | 亚洲成色在线综合网站 | 无遮无挡爽爽免费视频 | 无套内谢老熟女 | 亚洲综合另类小说色区 | 综合人妻久久一区二区精品 | 免费观看黄网站 | 欧美成人免费全部网站 | 国产亚洲视频中文字幕97精品 | 成人无码精品1区2区3区免费看 | 中国女人内谢69xxxx | 国产特级毛片aaaaaaa高清 | 色综合久久久无码网中文 | av无码不卡在线观看免费 | 亚洲中文字幕久久无码 | 亚洲综合在线一区二区三区 | 狠狠cao日日穞夜夜穞av | 亚洲欧洲中文日韩av乱码 | 无码av岛国片在线播放 | 午夜性刺激在线视频免费 | 人人妻人人澡人人爽欧美一区 | 亚洲欧美中文字幕5发布 | 丰满少妇人妻久久久久久 | 欧美人妻一区二区三区 | 3d动漫精品啪啪一区二区中 | а√天堂www在线天堂小说 | 国产农村妇女高潮大叫 | 欧美性猛交内射兽交老熟妇 | 亚洲精品成人av在线 | 精品厕所偷拍各类美女tp嘘嘘 | 两性色午夜视频免费播放 | 特黄特色大片免费播放器图片 | 国产精品毛片一区二区 | 377p欧洲日本亚洲大胆 | 久久久久久久女国产乱让韩 | 国产成人无码av在线影院 | 中文字幕无码av激情不卡 | 少妇无套内谢久久久久 | 少妇高潮一区二区三区99 | 国产精品-区区久久久狼 | 扒开双腿疯狂进出爽爽爽视频 | 草草网站影院白丝内射 | 高潮毛片无遮挡高清免费视频 | 久久99精品久久久久婷婷 | 一个人看的视频www在线 | 99久久99久久免费精品蜜桃 | 熟女俱乐部五十路六十路av | 精品国产麻豆免费人成网站 | 国产精品人妻一区二区三区四 | 中文无码精品a∨在线观看不卡 | 亚洲一区二区观看播放 | 精品久久久久香蕉网 | 午夜福利试看120秒体验区 | 我要看www免费看插插视频 | 国产av久久久久精东av | 性欧美疯狂xxxxbbbb | 亚洲第一无码av无码专区 | 超碰97人人做人人爱少妇 | 亚洲乱亚洲乱妇50p | 亚洲国产综合无码一区 | 理论片87福利理论电影 | 午夜精品久久久久久久 | 欧美熟妇另类久久久久久多毛 | 国产成人一区二区三区在线观看 | 欧美 日韩 亚洲 在线 | 成年女人永久免费看片 | 久久精品中文字幕一区 | 99er热精品视频 | 精品熟女少妇av免费观看 | 亚洲乱亚洲乱妇50p | 国精品人妻无码一区二区三区蜜柚 | 国产精品亚洲专区无码不卡 | 日本护士xxxxhd少妇 | 99久久人妻精品免费一区 | 久久综合给合久久狠狠狠97色 | 欧美人与禽zoz0性伦交 | 伊在人天堂亚洲香蕉精品区 | 97无码免费人妻超级碰碰夜夜 | 国产午夜手机精彩视频 | 国产精品国产三级国产专播 | 强辱丰满人妻hd中文字幕 | 日韩人妻少妇一区二区三区 | 亚洲精品中文字幕乱码 | 亚洲va中文字幕无码久久不卡 | 九九综合va免费看 | 青青久在线视频免费观看 | 欧美熟妇另类久久久久久不卡 | 亚洲色欲色欲天天天www | 亚洲国精产品一二二线 | 国产精品福利视频导航 | 蜜桃臀无码内射一区二区三区 | 伊人久久大香线焦av综合影院 | 女人被男人躁得好爽免费视频 | 亚洲一区二区三区国产精华液 | 国产又爽又黄又刺激的视频 | 国产亚洲美女精品久久久2020 | 无码午夜成人1000部免费视频 | 粗大的内捧猛烈进出视频 | 无码人中文字幕 | 爽爽影院免费观看 | 久久久婷婷五月亚洲97号色 | 4hu四虎永久在线观看 | 国产无av码在线观看 | 理论片87福利理论电影 | 青青青爽视频在线观看 | 亚洲国产精品无码一区二区三区 | 亚洲七七久久桃花影院 | 国产色在线 | 国产 | 久久www免费人成人片 | 久久久久99精品国产片 | 久久久久久国产精品无码下载 | 久久久久久a亚洲欧洲av冫 | 丰满妇女强制高潮18xxxx | 人人妻人人澡人人爽人人精品 | 无码吃奶揉捏奶头高潮视频 | 免费乱码人妻系列无码专区 | 国产精品久久久久久久影院 | 亚洲国产精品一区二区第一页 | 色一情一乱一伦一区二区三欧美 | 天天综合网天天综合色 | 99久久精品国产一区二区蜜芽 | 亚洲色大成网站www国产 | 中文字幕无码乱人伦 | 最近的中文字幕在线看视频 | 亚洲国产精品美女久久久久 | 国产成人无码a区在线观看视频app | 久久人人97超碰a片精品 | 老太婆性杂交欧美肥老太 | 中文无码精品a∨在线观看不卡 | 亚洲中文字幕在线无码一区二区 | 精品久久8x国产免费观看 | 色综合视频一区二区三区 | 国内老熟妇对白xxxxhd | 丰满肥臀大屁股熟妇激情视频 | 鲁一鲁av2019在线 | 我要看www免费看插插视频 | 国产精品亚洲专区无码不卡 | 无人区乱码一区二区三区 | 国内精品久久毛片一区二区 | 在线 国产 欧美 亚洲 天堂 | 国产成人无码av片在线观看不卡 | 粉嫩少妇内射浓精videos | 一个人免费观看的www视频 | 国产亚洲精品久久久久久国模美 | 国产激情一区二区三区 | 无码帝国www无码专区色综合 | 久久久久久亚洲精品a片成人 | 97久久超碰中文字幕 | 亚洲aⅴ无码成人网站国产app | 国产精品va在线观看无码 | 欧美激情内射喷水高潮 | 亚洲中文字幕va福利 | 亚洲区欧美区综合区自拍区 | 男人的天堂2018无码 | 久久久久99精品成人片 | 久激情内射婷内射蜜桃人妖 | 日本va欧美va欧美va精品 | 中文久久乱码一区二区 | 中文字幕av无码一区二区三区电影 | 伊人色综合久久天天小片 | 日本爽爽爽爽爽爽在线观看免 | 中国大陆精品视频xxxx | 国产精品人人爽人人做我的可爱 | 丝袜美腿亚洲一区二区 | 久久综合激激的五月天 | 亚洲乱码中文字幕在线 | 久久人妻内射无码一区三区 | 国产亚洲欧美日韩亚洲中文色 | 中文字幕人成乱码熟女app | 影音先锋中文字幕无码 | 精品无码国产一区二区三区av | 中文无码成人免费视频在线观看 | 天天av天天av天天透 | 亚洲人成人无码网www国产 | 蜜桃无码一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 日韩欧美群交p片內射中文 | 国产麻豆精品一区二区三区v视界 | 国产成人精品久久亚洲高清不卡 | 国产亚洲视频中文字幕97精品 | 狂野欧美激情性xxxx | 中文字幕久久久久人妻 | 图片小说视频一区二区 | 国产精品久久久久影院嫩草 | 天天摸天天透天天添 | 日日摸日日碰夜夜爽av | 一本色道久久综合狠狠躁 | 最新版天堂资源中文官网 | 亚洲阿v天堂在线 | 国产成人无码a区在线观看视频app | 亚洲自偷自拍另类第1页 | 久久精品女人的天堂av | 中文精品久久久久人妻不卡 | 亚洲一区二区三区 | 无码人妻丰满熟妇区毛片18 | 久久久精品456亚洲影院 | 久久精品国产日本波多野结衣 | 婷婷六月久久综合丁香 | 又粗又大又硬毛片免费看 | 99er热精品视频 | 国产激情综合五月久久 | 久久97精品久久久久久久不卡 | 狠狠cao日日穞夜夜穞av | 国产成人无码午夜视频在线观看 | 亚洲一区av无码专区在线观看 | 少妇久久久久久人妻无码 | 小sao货水好多真紧h无码视频 | 久激情内射婷内射蜜桃人妖 | 国产99久久精品一区二区 | 亚洲日韩av片在线观看 | 美女极度色诱视频国产 | 国产尤物精品视频 | 九九在线中文字幕无码 | 亚洲国产日韩a在线播放 | 精品一区二区三区无码免费视频 | 久久久精品456亚洲影院 | 九九热爱视频精品 | 久久久亚洲欧洲日产国码αv | 97资源共享在线视频 | 亚洲精品中文字幕乱码 | 午夜精品久久久久久久 | 亚洲精品午夜国产va久久成人 | 久久99精品国产麻豆蜜芽 | 兔费看少妇性l交大片免费 | 天天摸天天透天天添 | 又粗又大又硬又长又爽 | a在线观看免费网站大全 | 亚洲人成无码网www | 77777熟女视频在线观看 а天堂中文在线官网 | 人妻无码久久精品人妻 | 亚洲日韩中文字幕在线播放 | 少妇性l交大片欧洲热妇乱xxx | 中文字幕久久久久人妻 | 女人色极品影院 | 大屁股大乳丰满人妻 | 精品人妻人人做人人爽夜夜爽 | 国产精品18久久久久久麻辣 | 久久久久免费精品国产 | 国产婷婷色一区二区三区在线 | 国产在线一区二区三区四区五区 | 成人欧美一区二区三区黑人 | 欧美zoozzooz性欧美 | 国产超碰人人爽人人做人人添 | 久久99精品国产麻豆 | 国精产品一品二品国精品69xx | 国产手机在线αⅴ片无码观看 | 亚洲国产精品一区二区第一页 | 日日摸天天摸爽爽狠狠97 | 人人妻人人澡人人爽欧美一区 | 97精品人妻一区二区三区香蕉 | 学生妹亚洲一区二区 | 亚洲色大成网站www国产 | 色综合久久中文娱乐网 | 最近中文2019字幕第二页 | 成年美女黄网站色大免费全看 | 蜜桃视频韩日免费播放 | 噜噜噜亚洲色成人网站 | 精品午夜福利在线观看 | 国产欧美精品一区二区三区 | 久久精品中文闷骚内射 | 男女性色大片免费网站 | 无码人妻黑人中文字幕 | 中文字幕日韩精品一区二区三区 | 色欲人妻aaaaaaa无码 | 无码福利日韩神码福利片 | 精品国产青草久久久久福利 | 国产激情精品一区二区三区 | 永久黄网站色视频免费直播 | 欧美日韩综合一区二区三区 | 亚洲国产成人av在线观看 | 又湿又紧又大又爽a视频国产 | 波多野结衣av一区二区全免费观看 | 四虎国产精品一区二区 | 免费人成网站视频在线观看 | 亚洲色偷偷男人的天堂 | 97久久超碰中文字幕 | 日本精品人妻无码免费大全 | 久久人人爽人人爽人人片ⅴ | 国产精品爱久久久久久久 | 亚洲国产欧美在线成人 | 99久久精品国产一区二区蜜芽 | 377p欧洲日本亚洲大胆 | 国产精品人妻一区二区三区四 | 久久综合久久自在自线精品自 | 久久99精品国产.久久久久 | 亚洲s码欧洲m码国产av | 日韩精品a片一区二区三区妖精 | 精品国产福利一区二区 | 亚洲精品成人福利网站 | 日本一卡二卡不卡视频查询 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲精品一区二区三区婷婷月 | 一本一道久久综合久久 | 国产精品无码一区二区三区不卡 | 三级4级全黄60分钟 | 亚洲精品综合一区二区三区在线 | 亚洲爆乳精品无码一区二区三区 | 国产在线一区二区三区四区五区 | 国产av人人夜夜澡人人爽麻豆 | 欧美成人午夜精品久久久 | 国产午夜精品一区二区三区嫩草 | 日本熟妇浓毛 | 77777熟女视频在线观看 а天堂中文在线官网 | 一本色道久久综合亚洲精品不卡 | 东京无码熟妇人妻av在线网址 | 国产av剧情md精品麻豆 | 女人被爽到呻吟gif动态图视看 | 大色综合色综合网站 | 国产欧美精品一区二区三区 | 欧美一区二区三区视频在线观看 | 国产又粗又硬又大爽黄老大爷视 | 无码帝国www无码专区色综合 | 国产精品自产拍在线观看 | 国产乱人伦偷精品视频 | 精品无码成人片一区二区98 | 亚洲日本一区二区三区在线 | 久久久亚洲欧洲日产国码αv | 国产精品久久福利网站 | 欧美一区二区三区视频在线观看 | 乱人伦人妻中文字幕无码久久网 | 欧美激情一区二区三区成人 | 亚洲天堂2017无码中文 | 好男人社区资源 | 水蜜桃亚洲一二三四在线 | 性开放的女人aaa片 | 国产激情无码一区二区app | 欧美日韩综合一区二区三区 | 亚洲精品久久久久久一区二区 | 精品无码国产自产拍在线观看蜜 | 正在播放老肥熟妇露脸 | 日本xxxx色视频在线观看免费 | 波多野结衣aⅴ在线 | 精品国产成人一区二区三区 | 欧美熟妇另类久久久久久不卡 | 麻豆果冻传媒2021精品传媒一区下载 | 精品人妻人人做人人爽夜夜爽 | 强开小婷嫩苞又嫩又紧视频 | 日韩亚洲欧美精品综合 | 欧美人与善在线com | 国产欧美熟妇另类久久久 | 国产午夜亚洲精品不卡 | 成人试看120秒体验区 | 欧美三级a做爰在线观看 | аⅴ资源天堂资源库在线 | 久久精品人妻少妇一区二区三区 | 国内老熟妇对白xxxxhd | 久久久精品人妻久久影视 | 日产精品99久久久久久 | 少妇太爽了在线观看 | 免费国产成人高清在线观看网站 | 蜜桃视频插满18在线观看 | 中文字幕乱码人妻无码久久 | 狠狠色欧美亚洲狠狠色www | 精品久久综合1区2区3区激情 | 四虎国产精品免费久久 | 东京热一精品无码av | 亚洲精品中文字幕久久久久 | 亚洲欧美色中文字幕在线 | 暴力强奷在线播放无码 | 99久久精品无码一区二区毛片 | 丰满人妻被黑人猛烈进入 | 丰满人妻精品国产99aⅴ | 亚洲欧洲中文日韩av乱码 | 97久久精品无码一区二区 | 九月婷婷人人澡人人添人人爽 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲の无码国产の无码影院 | 亚洲中文字幕av在天堂 | 精品国精品国产自在久国产87 | 国产无遮挡又黄又爽又色 | 波多野结衣av在线观看 | 人人澡人人透人人爽 | 亚洲精品www久久久 | 国产午夜视频在线观看 | 无码国模国产在线观看 | 一个人看的视频www在线 | 午夜精品一区二区三区在线观看 | 日韩av无码一区二区三区 | 亚洲小说图区综合在线 | 免费人成网站视频在线观看 | 午夜肉伦伦影院 | 国产无套内射久久久国产 | 婷婷丁香五月天综合东京热 | 久久久久亚洲精品中文字幕 | 欧美亚洲日韩国产人成在线播放 | 人妻熟女一区 | 午夜时刻免费入口 | 国产无套粉嫩白浆在线 | av香港经典三级级 在线 | 久久精品人妻少妇一区二区三区 | 熟女体下毛毛黑森林 | 国产成人精品优优av | 国产女主播喷水视频在线观看 | 人妻少妇被猛烈进入中文字幕 | 午夜无码人妻av大片色欲 | 国产精品成人av在线观看 | 国产午夜福利亚洲第一 | 久久97精品久久久久久久不卡 | 蜜桃臀无码内射一区二区三区 | 欧美人与牲动交xxxx | 成人精品视频一区二区三区尤物 | 性啪啪chinese东北女人 | 88国产精品欧美一区二区三区 | 成人无码精品1区2区3区免费看 | 国产一精品一av一免费 | 国产卡一卡二卡三 | 成人精品一区二区三区中文字幕 | 日本大香伊一区二区三区 | 成人无码视频在线观看网站 | 久久久久久亚洲精品a片成人 | 久久婷婷五月综合色国产香蕉 | 丰满诱人的人妻3 | 国产精品.xx视频.xxtv | 东京热一精品无码av | 婷婷六月久久综合丁香 | 老司机亚洲精品影院 | 国产极品视觉盛宴 | 中文字幕色婷婷在线视频 | av在线亚洲欧洲日产一区二区 | 欧美肥老太牲交大战 | 国产亚洲欧美日韩亚洲中文色 | 精品国精品国产自在久国产87 | 中文字幕无码免费久久99 | 婷婷丁香五月天综合东京热 | 风流少妇按摩来高潮 | 狠狠cao日日穞夜夜穞av | 久久人妻内射无码一区三区 | 亚洲 a v无 码免 费 成 人 a v | 国产精品亚洲а∨无码播放麻豆 | 国产综合久久久久鬼色 | 无码纯肉视频在线观看 | 国产精品久久久 | 亚洲精品一区二区三区在线 | 久久久精品人妻久久影视 | 特黄特色大片免费播放器图片 | 国产亚洲人成a在线v网站 | 无套内谢的新婚少妇国语播放 | 日本精品高清一区二区 | 国内精品人妻无码久久久影院蜜桃 | 波多野结衣 黑人 | 国内揄拍国内精品人妻 | 亚洲一区二区三区无码久久 | 欧美熟妇另类久久久久久不卡 | 国产精品a成v人在线播放 | 初尝人妻少妇中文字幕 | 国产一精品一av一免费 | 性欧美大战久久久久久久 | 久久久久久av无码免费看大片 | 国产亚洲欧美在线专区 | 狂野欧美性猛xxxx乱大交 | 国产三级久久久精品麻豆三级 | 亚洲 高清 成人 动漫 | 香港三级日本三级妇三级 | av无码久久久久不卡免费网站 | 性生交大片免费看l | 午夜福利试看120秒体验区 | 国产又爽又黄又刺激的视频 | 国产一区二区不卡老阿姨 | 成人欧美一区二区三区黑人 | 亚洲国产精品成人久久蜜臀 | 男人扒开女人内裤强吻桶进去 | 色婷婷av一区二区三区之红樱桃 | 中文无码精品a∨在线观看不卡 | 精品 日韩 国产 欧美 视频 | 亚洲综合精品香蕉久久网 | 亚洲日本一区二区三区在线 | 一本久道久久综合狠狠爱 | 精品少妇爆乳无码av无码专区 | 国产小呦泬泬99精品 | 欧美日韩视频无码一区二区三 | 精品水蜜桃久久久久久久 | 国产超级va在线观看视频 | 粗大的内捧猛烈进出视频 | 精品熟女少妇av免费观看 | 人妻少妇精品无码专区动漫 | 自拍偷自拍亚洲精品被多人伦好爽 | 真人与拘做受免费视频 | 亚洲色大成网站www | 天天拍夜夜添久久精品大 | 狂野欧美性猛xxxx乱大交 | 国产成人精品优优av | 无码精品人妻一区二区三区av | 性做久久久久久久免费看 | 国产色xx群视频射精 | 强伦人妻一区二区三区视频18 | 最近免费中文字幕中文高清百度 | 色欲人妻aaaaaaa无码 | 伊人久久大香线蕉亚洲 | 亚洲热妇无码av在线播放 | 国产乱人无码伦av在线a | 性色欲情网站iwww九文堂 | 色妞www精品免费视频 | 久久99精品国产麻豆 | 国产精品亚洲综合色区韩国 | 人妻夜夜爽天天爽三区 | 欧美日韩在线亚洲综合国产人 | 乱码av麻豆丝袜熟女系列 | 精品久久久无码中文字幕 | 国产黄在线观看免费观看不卡 | 国产麻豆精品精东影业av网站 | 国产精品无码mv在线观看 | 日韩精品成人一区二区三区 | 兔费看少妇性l交大片免费 | 无遮挡啪啪摇乳动态图 | 国产精品资源一区二区 | 国产午夜无码精品免费看 | 夜夜躁日日躁狠狠久久av | 国内精品人妻无码久久久影院蜜桃 | 国产精品亚洲一区二区三区喷水 | 亚洲欧美精品aaaaaa片 | 日本欧美一区二区三区乱码 | 亚洲成av人片在线观看无码不卡 | 一区二区传媒有限公司 | 亚洲人成网站色7799 | 九月婷婷人人澡人人添人人爽 | 久久综合给久久狠狠97色 | 精品久久8x国产免费观看 | 亚洲国产欧美在线成人 | 午夜无码区在线观看 | 亚洲精品一区二区三区在线观看 | 99久久久无码国产aaa精品 | 欧美 亚洲 国产 另类 | 天天爽夜夜爽夜夜爽 | 国产性生交xxxxx无码 | 亚洲中文字幕久久无码 | 日日碰狠狠丁香久燥 | 欧美第一黄网免费网站 | 天堂亚洲2017在线观看 | 成人精品视频一区二区 | 人妻插b视频一区二区三区 | 亚洲 另类 在线 欧美 制服 | 在线精品国产一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 日日麻批免费40分钟无码 | 曰韩无码二三区中文字幕 | 无码人妻少妇伦在线电影 | 久久99精品久久久久久 | 日韩人妻少妇一区二区三区 | 美女黄网站人色视频免费国产 | 无码免费一区二区三区 | av香港经典三级级 在线 | 精品久久8x国产免费观看 | 学生妹亚洲一区二区 | 88国产精品欧美一区二区三区 | 国内揄拍国内精品少妇国语 | 女人被男人躁得好爽免费视频 | 成人无码精品一区二区三区 | 日韩av无码中文无码电影 | 国产午夜亚洲精品不卡 | 国产精品无码mv在线观看 | 婷婷六月久久综合丁香 | 中文字幕乱妇无码av在线 | 永久黄网站色视频免费直播 | 国产精品亚洲一区二区三区喷水 | 色综合视频一区二区三区 | 97夜夜澡人人爽人人喊中国片 | 精品无码av一区二区三区 | 国产精品美女久久久 | 国产人妻大战黑人第1集 | 成年女人永久免费看片 | 六月丁香婷婷色狠狠久久 | 人人妻人人澡人人爽欧美一区 | 正在播放老肥熟妇露脸 | 国产精品人妻一区二区三区四 | 人妻互换免费中文字幕 | 日本精品久久久久中文字幕 | 国产成人无码av片在线观看不卡 | 欧美国产日韩亚洲中文 | √8天堂资源地址中文在线 | 十八禁真人啪啪免费网站 | 日韩欧美中文字幕公布 | 东京热男人av天堂 | 99视频精品全部免费免费观看 | 久久久亚洲欧洲日产国码αv | 国产9 9在线 | 中文 | 爆乳一区二区三区无码 | 人妻插b视频一区二区三区 | 久久99精品国产麻豆蜜芽 | 日韩精品无码一本二本三本色 | 亚洲国产av精品一区二区蜜芽 | 丁香花在线影院观看在线播放 | 东京热一精品无码av | 无码av中文字幕免费放 | 日日天日日夜日日摸 | 亚洲伊人久久精品影院 | 亚洲精品一区二区三区婷婷月 | 国模大胆一区二区三区 | 精品国产成人一区二区三区 | 色五月五月丁香亚洲综合网 | 精品欧洲av无码一区二区三区 | 国产成人人人97超碰超爽8 | 亚洲熟妇自偷自拍另类 | 久激情内射婷内射蜜桃人妖 | 黑森林福利视频导航 | 无码国产色欲xxxxx视频 | 老熟妇乱子伦牲交视频 | 中文字幕 人妻熟女 | 中文字幕人妻丝袜二区 | 久久国产自偷自偷免费一区调 | 无码国产色欲xxxxx视频 | 中文字幕 亚洲精品 第1页 | 日本一区二区三区免费播放 | 老子影院午夜伦不卡 | 欧美精品一区二区精品久久 | 99riav国产精品视频 | 7777奇米四色成人眼影 | 99久久亚洲精品无码毛片 | 亚洲男人av香蕉爽爽爽爽 | 国产99久久精品一区二区 | 国产亚洲欧美在线专区 | 亚洲色在线无码国产精品不卡 | 久久伊人色av天堂九九小黄鸭 | 天堂а√在线中文在线 | 亚洲七七久久桃花影院 | 亚洲日韩中文字幕在线播放 | 伊人久久大香线蕉亚洲 | 国产av一区二区精品久久凹凸 | 人人妻人人澡人人爽精品欧美 | 激情内射日本一区二区三区 | 精品少妇爆乳无码av无码专区 | 无码一区二区三区在线观看 | 亚洲国产精品一区二区第一页 | 国产热a欧美热a在线视频 | 国产成人无码av一区二区 | 欧美一区二区三区视频在线观看 | 亚洲高清偷拍一区二区三区 | 国产激情一区二区三区 | 日韩 欧美 动漫 国产 制服 | 牲交欧美兽交欧美 | 久久午夜无码鲁丝片秋霞 | 色综合久久久无码网中文 | 中文字幕无码热在线视频 | 秋霞成人午夜鲁丝一区二区三区 | 福利一区二区三区视频在线观看 | 丰满少妇女裸体bbw | 精品国产一区av天美传媒 | 久久99热只有频精品8 | 无套内谢的新婚少妇国语播放 | 乱码av麻豆丝袜熟女系列 | 国产精品无码成人午夜电影 | 在线播放无码字幕亚洲 | 亚洲aⅴ无码成人网站国产app | √天堂资源地址中文在线 | 无码毛片视频一区二区本码 | 精品国偷自产在线视频 | 精品厕所偷拍各类美女tp嘘嘘 | 色综合久久久无码网中文 | 国产精品久久精品三级 | 国产成人无码区免费内射一片色欲 | 中文字幕无线码 | 国产麻豆精品一区二区三区v视界 | 捆绑白丝粉色jk震动捧喷白浆 | 国内老熟妇对白xxxxhd | 夜精品a片一区二区三区无码白浆 | 久久久久久九九精品久 | 久久久久99精品成人片 | 国产在线aaa片一区二区99 | 人人妻人人澡人人爽人人精品 | 国产xxx69麻豆国语对白 | 国产精品久久久久久久影院 | 久久综合激激的五月天 | 国产精品亚洲lv粉色 | 国产后入清纯学生妹 | 国产办公室秘书无码精品99 | 日本大乳高潮视频在线观看 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美变态另类xxxx | 久久精品人人做人人综合 | 国内精品人妻无码久久久影院蜜桃 | 老司机亚洲精品影院无码 | 超碰97人人射妻 | 国产精品毛片一区二区 | 东京热无码av男人的天堂 | 国产精品无套呻吟在线 | 国内揄拍国内精品少妇国语 | 激情内射亚州一区二区三区爱妻 | 国产日产欧产精品精品app | 99久久人妻精品免费二区 | 国产69精品久久久久app下载 | 男女猛烈xx00免费视频试看 | 女人被男人爽到呻吟的视频 | 中文字幕无码免费久久9一区9 | 在线 国产 欧美 亚洲 天堂 | 小鲜肉自慰网站xnxx | 色诱久久久久综合网ywww | 免费观看又污又黄的网站 | 欧美日韩一区二区免费视频 | 丰满肥臀大屁股熟妇激情视频 | 国产成人一区二区三区在线观看 | 两性色午夜免费视频 | 熟妇女人妻丰满少妇中文字幕 | 久久人人爽人人爽人人片ⅴ | 国产精品人妻一区二区三区四 | 特级做a爰片毛片免费69 | 黑森林福利视频导航 | 久久亚洲a片com人成 | 国产av久久久久精东av | 西西人体www44rt大胆高清 | 给我免费的视频在线观看 | 国产97色在线 | 免 | 麻豆成人精品国产免费 | 黄网在线观看免费网站 | 荫蒂被男人添的好舒服爽免费视频 | 300部国产真实乱 | 99久久人妻精品免费一区 | 久久人人爽人人爽人人片ⅴ | 97人妻精品一区二区三区 | 免费中文字幕日韩欧美 | 国产精品.xx视频.xxtv | 无码成人精品区在线观看 | 国语精品一区二区三区 | 亚洲熟悉妇女xxx妇女av | 久久精品视频在线看15 | 成人影院yy111111在线观看 | 日日摸天天摸爽爽狠狠97 | 午夜精品一区二区三区在线观看 | 欧美xxxxx精品 | 又大又黄又粗又爽的免费视频 | 亚洲人成无码网www | 国产av无码专区亚洲a∨毛片 | 欧美肥老太牲交大战 | 美女张开腿让人桶 | 中文字幕无码av激情不卡 | 国产乱人无码伦av在线a | 超碰97人人射妻 | 玩弄人妻少妇500系列视频 | 久久综合给合久久狠狠狠97色 | 亚洲区欧美区综合区自拍区 | 人妻熟女一区 | 精品久久久中文字幕人妻 | 国产精品久久久久久亚洲影视内衣 | 亚洲乱码中文字幕在线 | 国产熟妇高潮叫床视频播放 | 大地资源中文第3页 | 欧洲欧美人成视频在线 | 18禁黄网站男男禁片免费观看 | 久久伊人色av天堂九九小黄鸭 | 国产免费久久精品国产传媒 | 精品欧洲av无码一区二区三区 | 中文字幕日产无线码一区 | 无码成人精品区在线观看 | 老司机亚洲精品影院 | 国产手机在线αⅴ片无码观看 | 无码av中文字幕免费放 | 高中生自慰www网站 | 久久久久久久人妻无码中文字幕爆 | 欧美xxxxx精品 | 人妻少妇精品视频专区 | 色一情一乱一伦一视频免费看 | 六月丁香婷婷色狠狠久久 | 九月婷婷人人澡人人添人人爽 | 亚洲码国产精品高潮在线 | 强伦人妻一区二区三区视频18 | 亚洲色无码一区二区三区 | 日本在线高清不卡免费播放 | 久久精品人人做人人综合试看 | 色欲人妻aaaaaaa无码 | 欧美老妇交乱视频在线观看 | 欧美日本日韩 | 国产精品无码mv在线观看 | 免费人成网站视频在线观看 | 久久国产精品萌白酱免费 | 成人精品视频一区二区三区尤物 | 亚洲区小说区激情区图片区 | 日韩欧美中文字幕在线三区 | 亚洲精品午夜无码电影网 | 在线а√天堂中文官网 | 亚洲精品www久久久 | 人妻无码αv中文字幕久久琪琪布 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久精品人人做人人综合 | 国产无av码在线观看 | 亚洲综合无码久久精品综合 | 18无码粉嫩小泬无套在线观看 | 国产疯狂伦交大片 | 国产人成高清在线视频99最全资源 | 日韩在线不卡免费视频一区 | 欧洲欧美人成视频在线 | 少妇高潮一区二区三区99 | 色诱久久久久综合网ywww | 欧洲极品少妇 | 成人综合网亚洲伊人 | 亚洲一区二区三区偷拍女厕 | www一区二区www免费 | 久久精品一区二区三区四区 | 国产免费久久精品国产传媒 | 国产av无码专区亚洲a∨毛片 | 亚洲成a人片在线观看无码3d | 久久人人97超碰a片精品 | 日韩人妻系列无码专区 | 亚洲国产成人av在线观看 | 亚洲男人av天堂午夜在 | 日韩精品a片一区二区三区妖精 | 亚洲成色在线综合网站 | 真人与拘做受免费视频一 | 天堂а√在线地址中文在线 | 丰满人妻翻云覆雨呻吟视频 | 午夜福利一区二区三区在线观看 | 亚洲中文字幕久久无码 | 男女性色大片免费网站 | 领导边摸边吃奶边做爽在线观看 | 无遮挡啪啪摇乳动态图 | 色欲综合久久中文字幕网 | 精品无码一区二区三区爱欲 | 欧美xxxx黑人又粗又长 | 亚洲精品成a人在线观看 | 久久无码中文字幕免费影院蜜桃 | 性色欲网站人妻丰满中文久久不卡 | 久久综合给久久狠狠97色 | 亚洲色偷偷男人的天堂 | 欧美熟妇另类久久久久久不卡 | 性欧美熟妇videofreesex | 日日摸夜夜摸狠狠摸婷婷 | 牛和人交xxxx欧美 | 国产又粗又硬又大爽黄老大爷视 | 日产精品99久久久久久 | 2020久久超碰国产精品最新 | 国产精品亚洲一区二区三区喷水 | 成人av无码一区二区三区 | 免费国产成人高清在线观看网站 | www国产亚洲精品久久久日本 | 任你躁在线精品免费 | 无码福利日韩神码福利片 | 久久综合九色综合97网 | 精品一区二区不卡无码av | 蜜臀av在线播放 久久综合激激的五月天 | 成人精品天堂一区二区三区 | 亚洲精品一区三区三区在线观看 | 无码人妻出轨黑人中文字幕 | 精品一二三区久久aaa片 | 国产精品18久久久久久麻辣 | 在线看片无码永久免费视频 | 成人无码精品一区二区三区 | 久久亚洲a片com人成 | 牲欲强的熟妇农村老妇女视频 | 人人爽人人澡人人高潮 | 色婷婷av一区二区三区之红樱桃 | 嫩b人妻精品一区二区三区 | 国产色在线 | 国产 | 噜噜噜亚洲色成人网站 | 精品国产一区二区三区四区 | 人妻夜夜爽天天爽三区 | 九月婷婷人人澡人人添人人爽 | 色综合久久88色综合天天 | 精品aⅴ一区二区三区 | 一个人免费观看的www视频 | 亚洲乱亚洲乱妇50p | 精品欧洲av无码一区二区三区 | 女人和拘做爰正片视频 | 免费无码的av片在线观看 | 国产成人无码专区 | 精品水蜜桃久久久久久久 | 午夜福利一区二区三区在线观看 | 婷婷丁香六月激情综合啪 | 波多野结衣av一区二区全免费观看 | 国产精品久久久久久亚洲毛片 | 在线а√天堂中文官网 | 国产农村妇女高潮大叫 | 国产精品va在线观看无码 | 亚洲啪av永久无码精品放毛片 | 久久精品成人欧美大片 | 亚洲天堂2017无码中文 | 丝袜美腿亚洲一区二区 | 中文久久乱码一区二区 | 亚洲午夜久久久影院 | 四虎影视成人永久免费观看视频 | 久久精品中文字幕一区 | 久久国产自偷自偷免费一区调 | 久久99精品久久久久婷婷 | 精品无人区无码乱码毛片国产 | 国产精品亚洲综合色区韩国 | 人妻少妇精品久久 | 又大又硬又爽免费视频 | 亚洲 日韩 欧美 成人 在线观看 | 国产偷自视频区视频 | 国产一区二区三区日韩精品 | 日日摸夜夜摸狠狠摸婷婷 | 国产午夜亚洲精品不卡 | 欧美性猛交内射兽交老熟妇 | 一本色道久久综合亚洲精品不卡 | 国产乡下妇女做爰 | 国产suv精品一区二区五 | 中国大陆精品视频xxxx | 国产性生交xxxxx无码 | 国产美女精品一区二区三区 | 天堂久久天堂av色综合 | 色欲久久久天天天综合网精品 | 国产手机在线αⅴ片无码观看 | 久久99精品久久久久久动态图 | 一本色道久久综合亚洲精品不卡 | 精品无码国产自产拍在线观看蜜 | 日本www一道久久久免费榴莲 | 女人被男人躁得好爽免费视频 | 三上悠亚人妻中文字幕在线 | 国产绳艺sm调教室论坛 | 国产高清不卡无码视频 | 牛和人交xxxx欧美 | 国产97人人超碰caoprom | 免费人成网站视频在线观看 | 国产精品国产自线拍免费软件 | 性生交大片免费看女人按摩摩 | 性欧美大战久久久久久久 | 日本一卡2卡3卡四卡精品网站 | 老太婆性杂交欧美肥老太 | 亚洲精品成a人在线观看 | 亚洲综合精品香蕉久久网 | 女人色极品影院 | 欧美大屁股xxxxhd黑色 | 国产人妻大战黑人第1集 | 婷婷色婷婷开心五月四房播播 | 欧美人与禽zoz0性伦交 | 欧洲熟妇色 欧美 | 一本久久a久久精品亚洲 | 久久国产精品偷任你爽任你 | 亚洲国产成人a精品不卡在线 | 女人被男人躁得好爽免费视频 | 亚洲 日韩 欧美 成人 在线观看 | 欧美性色19p | 国产香蕉尹人综合在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | av无码不卡在线观看免费 | 欧洲欧美人成视频在线 | 人人爽人人澡人人人妻 | 国产精品无码一区二区三区不卡 | 国产黄在线观看免费观看不卡 | 国产成人无码一二三区视频 | 亚洲色成人中文字幕网站 | 小泽玛莉亚一区二区视频在线 | 人妻夜夜爽天天爽三区 | 激情内射亚州一区二区三区爱妻 | 精品国产成人一区二区三区 | 亚洲色大成网站www | 乱人伦人妻中文字幕无码 | 亚洲日本va中文字幕 | 国产精品久久久一区二区三区 | 无码av最新清无码专区吞精 | 国产精品理论片在线观看 | 国产精品va在线播放 | 久久综合狠狠综合久久综合88 | 99在线 | 亚洲 | 亚洲男人av香蕉爽爽爽爽 | 男女猛烈xx00免费视频试看 | 精品人妻人人做人人爽夜夜爽 | 色一情一乱一伦 | 波多野42部无码喷潮在线 | 国产三级久久久精品麻豆三级 | 欧美真人作爱免费视频 | 亚洲一区二区三区 | 成人无码视频在线观看网站 | 乌克兰少妇性做爰 | 色一情一乱一伦一区二区三欧美 | 久久久久久久久蜜桃 | 99久久人妻精品免费一区 | 日本熟妇大屁股人妻 | 男女超爽视频免费播放 | 丰满少妇高潮惨叫视频 | 美女张开腿让人桶 | 玩弄少妇高潮ⅹxxxyw | 东北女人啪啪对白 | 亚洲精品国偷拍自产在线麻豆 | 色情久久久av熟女人妻网站 | 亚洲色www成人永久网址 | 久久久精品欧美一区二区免费 | 一本久久a久久精品vr综合 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产凸凹视频一区二区 | 国产在线精品一区二区三区直播 | 亚洲无人区午夜福利码高清完整版 | 亚洲天堂2017无码 | 学生妹亚洲一区二区 | 欧美xxxx黑人又粗又长 | 又大又硬又黄的免费视频 | 牲交欧美兽交欧美 | 丝袜人妻一区二区三区 | 女人高潮内射99精品 | 无码午夜成人1000部免费视频 | 人妻与老人中文字幕 | 纯爱无遮挡h肉动漫在线播放 | 国产av一区二区精品久久凹凸 | 99久久婷婷国产综合精品青草免费 | 色欲综合久久中文字幕网 | 久久精品99久久香蕉国产色戒 | 亚洲国精产品一二二线 | 日韩精品a片一区二区三区妖精 | 中文亚洲成a人片在线观看 | 亚洲精品www久久久 | 丰满诱人的人妻3 | 久久亚洲国产成人精品性色 | 在线视频网站www色 | 色偷偷人人澡人人爽人人模 | 色欲人妻aaaaaaa无码 | 纯爱无遮挡h肉动漫在线播放 | 欧美人与牲动交xxxx | 伊人久久大香线蕉av一区二区 | 4hu四虎永久在线观看 | 欧美真人作爱免费视频 | 成人免费视频视频在线观看 免费 | 亚洲区小说区激情区图片区 | 青青久在线视频免费观看 | 黑人粗大猛烈进出高潮视频 | 亚洲人成网站免费播放 | 国产精品美女久久久久av爽李琼 | 久精品国产欧美亚洲色aⅴ大片 | 婷婷色婷婷开心五月四房播播 | 中文字幕无码人妻少妇免费 | 99视频精品全部免费免费观看 | 在线播放免费人成毛片乱码 | 丁香花在线影院观看在线播放 | 欧美日韩一区二区三区自拍 | 学生妹亚洲一区二区 | 久久精品人妻少妇一区二区三区 | 国产成人一区二区三区别 | 精品日本一区二区三区在线观看 | 国产精品人妻一区二区三区四 | 久久综合网欧美色妞网 | 日本护士xxxxhd少妇 | 97人妻精品一区二区三区 | 夫妻免费无码v看片 | 欧美 日韩 人妻 高清 中文 | 亚洲码国产精品高潮在线 | 鲁鲁鲁爽爽爽在线视频观看 | 东北女人啪啪对白 | 国产一区二区不卡老阿姨 | 伊在人天堂亚洲香蕉精品区 | 人人澡人摸人人添 | 欧美变态另类xxxx | 国产极品美女高潮无套在线观看 | 日日麻批免费40分钟无码 | 久久www免费人成人片 | 日本护士xxxxhd少妇 | 99久久精品日本一区二区免费 | 国产亚洲精品久久久久久久 | 国产内射爽爽大片视频社区在线 | 内射老妇bbwx0c0ck | 一本色道久久综合亚洲精品不卡 | 欧美人与动性行为视频 | 四虎影视成人永久免费观看视频 | 东京一本一道一二三区 | 一本无码人妻在中文字幕免费 | 亚洲国产一区二区三区在线观看 | 久久久久久九九精品久 | aⅴ亚洲 日韩 色 图网站 播放 | 国产香蕉尹人综合在线观看 | 国产午夜亚洲精品不卡 | 一本无码人妻在中文字幕免费 | 亚洲国产高清在线观看视频 | 99久久婷婷国产综合精品青草免费 | 无码人妻精品一区二区三区下载 | 中文字幕无码热在线视频 | 无码精品国产va在线观看dvd | 欧美性生交xxxxx久久久 | 久久久亚洲欧洲日产国码αv | 福利一区二区三区视频在线观看 | 亚洲欧美精品aaaaaa片 | 国产黄在线观看免费观看不卡 | 国产精品自产拍在线观看 | 久久久久久a亚洲欧洲av冫 | 粉嫩少妇内射浓精videos | 午夜成人1000部免费视频 | 精品乱子伦一区二区三区 | 日本www一道久久久免费榴莲 | 国产成人无码专区 | 婷婷丁香五月天综合东京热 | 亚洲精品成人福利网站 | 日韩亚洲欧美中文高清在线 | 久久综合给合久久狠狠狠97色 | 亚洲日韩精品欧美一区二区 | 久久这里只有精品视频9 | 在线观看欧美一区二区三区 | 国产精品香蕉在线观看 | 久久精品国产大片免费观看 | 日韩少妇内射免费播放 | www国产精品内射老师 | 天天摸天天碰天天添 | 十八禁真人啪啪免费网站 | av香港经典三级级 在线 | 国产黄在线观看免费观看不卡 | 欧美丰满熟妇xxxx性ppx人交 | 国产办公室秘书无码精品99 | 欧美乱妇无乱码大黄a片 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲色在线无码国产精品不卡 | 久久久久99精品国产片 | 精品国产一区二区三区四区在线看 | 奇米影视7777久久精品 | 久久精品人人做人人综合试看 | 男女超爽视频免费播放 | 国产高清av在线播放 | 久久久久人妻一区精品色欧美 | 亚洲自偷自拍另类第1页 | 男女下面进入的视频免费午夜 | 青青青爽视频在线观看 | 国产精品a成v人在线播放 | 色综合久久久无码网中文 | 好男人www社区 | 西西人体www44rt大胆高清 | 欧美国产日韩久久mv | 欧美人妻一区二区三区 | 18黄暴禁片在线观看 | 内射欧美老妇wbb | 久久综合激激的五月天 | 纯爱无遮挡h肉动漫在线播放 | 夫妻免费无码v看片 | 中文字幕乱妇无码av在线 | 人妻少妇被猛烈进入中文字幕 | 精品久久久久久人妻无码中文字幕 | 国产精品丝袜黑色高跟鞋 | 老熟妇仑乱视频一区二区 | 成人性做爰aaa片免费看不忠 | 色偷偷人人澡人人爽人人模 | 18精品久久久无码午夜福利 | 国产精品久久久久无码av色戒 | 老熟女乱子伦 | 成人精品视频一区二区 | 少妇太爽了在线观看 | 曰韩无码二三区中文字幕 | 久久综合狠狠综合久久综合88 | 国产精品va在线观看无码 | 国产xxx69麻豆国语对白 | 中文字幕人妻无码一区二区三区 | 欧美日韩一区二区综合 | 成人动漫在线观看 | 综合网日日天干夜夜久久 | 亚洲精品成人av在线 | 精品成在人线av无码免费看 | 国内综合精品午夜久久资源 | 最新国产麻豆aⅴ精品无码 | 激情国产av做激情国产爱 | 无码人妻精品一区二区三区下载 | 国产精品人人爽人人做我的可爱 | 亚洲中文字幕乱码av波多ji | 最新国产乱人伦偷精品免费网站 | 日日摸夜夜摸狠狠摸婷婷 | 久久久成人毛片无码 | 精品久久久久久人妻无码中文字幕 | 国产精品igao视频网 | 亚洲 欧美 激情 小说 另类 | 一区二区三区高清视频一 | 成人精品视频一区二区三区尤物 | 国产激情无码一区二区app | 欧美丰满少妇xxxx性 | 久在线观看福利视频 | 亚洲 a v无 码免 费 成 人 a v | 精品无人区无码乱码毛片国产 | 亚洲一区二区三区四区 | 国产熟妇另类久久久久 | 三级4级全黄60分钟 | 国色天香社区在线视频 | 亚洲а∨天堂久久精品2021 | 18无码粉嫩小泬无套在线观看 | 国产精品久久久久影院嫩草 | 午夜福利不卡在线视频 | 我要看www免费看插插视频 | 熟妇人妻无乱码中文字幕 | 成在人线av无码免观看麻豆 | 青青久在线视频免费观看 | 亚洲中文字幕va福利 | 天天躁日日躁狠狠躁免费麻豆 | 国产精品无码成人午夜电影 | 国产欧美精品一区二区三区 | 国产午夜精品一区二区三区嫩草 | 国产一区二区三区影院 | 国产精品对白交换视频 | 国产精品资源一区二区 | 日韩亚洲欧美中文高清在线 | 一本大道久久东京热无码av | 55夜色66夜色国产精品视频 | 伦伦影院午夜理论片 | 亚洲色在线无码国产精品不卡 | 蜜臀av无码人妻精品 | 日本精品人妻无码免费大全 | 国模大胆一区二区三区 | 丰满人妻一区二区三区免费视频 | 中文字幕乱码亚洲无线三区 | 欧美熟妇另类久久久久久多毛 | 亚洲精品国产精品乱码视色 | 国内揄拍国内精品人妻 | 久久久久av无码免费网 | 又黄又爽又色的视频 | 久久视频在线观看精品 | 国产在线精品一区二区三区直播 | 无码av中文字幕免费放 | 欧美丰满熟妇xxxx性ppx人交 | 免费观看的无遮挡av | 欧美激情内射喷水高潮 | 粗大的内捧猛烈进出视频 | 日本又色又爽又黄的a片18禁 | 日本护士毛茸茸高潮 | 国产极品视觉盛宴 | 性色av无码免费一区二区三区 | 午夜时刻免费入口 | 成人性做爰aaa片免费看不忠 | 中文毛片无遮挡高清免费 | 丰满人妻精品国产99aⅴ | 天下第一社区视频www日本 | 国产亚洲精品久久久ai换 | 亚洲区小说区激情区图片区 | 人人妻人人澡人人爽欧美一区 | 国产9 9在线 | 中文 | 76少妇精品导航 | 131美女爱做视频 | 国产熟妇另类久久久久 | 无码一区二区三区在线 | 亚洲精品久久久久中文第一幕 | 九月婷婷人人澡人人添人人爽 | 国精产品一品二品国精品69xx | 色综合久久久无码中文字幕 | 无码国产乱人伦偷精品视频 | 奇米影视7777久久精品 | 蜜桃视频插满18在线观看 | 免费乱码人妻系列无码专区 | 一二三四社区在线中文视频 | 九九久久精品国产免费看小说 | 亚洲伊人久久精品影院 | 日本丰满护士爆乳xxxx | 天海翼激烈高潮到腰振不止 | 俺去俺来也在线www色官网 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲精品午夜国产va久久成人 | 无套内射视频囯产 | 欧美阿v高清资源不卡在线播放 | 欧美人与禽猛交狂配 | 无码精品人妻一区二区三区av | 中文字幕无码免费久久99 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 55夜色66夜色国产精品视频 | 精品欧洲av无码一区二区三区 | 国产精品久久久久久久9999 | 欧美激情综合亚洲一二区 | 婷婷色婷婷开心五月四房播播 | 成人免费视频视频在线观看 免费 | 国产精品香蕉在线观看 | 午夜熟女插插xx免费视频 | 国产午夜福利100集发布 | 成人精品一区二区三区中文字幕 | 亚洲狠狠婷婷综合久久 | 亚洲理论电影在线观看 | 亚洲人成影院在线无码按摩店 | 欧美人与动性行为视频 | 国产精品美女久久久 | 天天躁日日躁狠狠躁免费麻豆 | 国产片av国语在线观看 | 97夜夜澡人人双人人人喊 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲国产精品久久久天堂 | 亚洲成在人网站无码天堂 | 大屁股大乳丰满人妻 | 正在播放东北夫妻内射 | 亚洲熟悉妇女xxx妇女av | 婷婷五月综合激情中文字幕 | 国产黄在线观看免费观看不卡 | 成 人影片 免费观看 | 国产97色在线 | 免 | 午夜精品久久久久久久久 | 国产极品美女高潮无套在线观看 | 欧美日韩人成综合在线播放 | 亚洲日韩中文字幕在线播放 | 久久aⅴ免费观看 | 俺去俺来也在线www色官网 | 亚洲成av人在线观看网址 | a在线亚洲男人的天堂 | 久久久精品欧美一区二区免费 | 久久久久久久久蜜桃 | 国产精品无码一区二区三区不卡 | 领导边摸边吃奶边做爽在线观看 | 性欧美大战久久久久久久 | 精品少妇爆乳无码av无码专区 | 亚洲综合无码久久精品综合 | 免费国产黄网站在线观看 | 性生交大片免费看l | 初尝人妻少妇中文字幕 | 久久久久成人精品免费播放动漫 | 日韩精品久久久肉伦网站 | 少妇人妻大乳在线视频 | 日产精品99久久久久久 | a片免费视频在线观看 | 欧美亚洲日韩国产人成在线播放 | 亚洲国产精品无码久久久久高潮 | 大乳丰满人妻中文字幕日本 | 精品国偷自产在线 | 97se亚洲精品一区 | 日日躁夜夜躁狠狠躁 | 中文字幕乱妇无码av在线 | 青草青草久热国产精品 | 午夜精品久久久久久久 | 久久亚洲精品中文字幕无男同 | 欧美一区二区三区视频在线观看 | 国产免费观看黄av片 | 久久婷婷五月综合色国产香蕉 | 日本高清一区免费中文视频 | 性生交大片免费看l | 精品国产一区二区三区四区在线看 | 国产精品久久久久9999小说 | 国产精品人妻一区二区三区四 | 亚洲午夜无码久久 | 亚洲成av人影院在线观看 | 国产香蕉尹人视频在线 | 夜先锋av资源网站 | 欧美三级a做爰在线观看 | 久久亚洲国产成人精品性色 | 丰满少妇熟乱xxxxx视频 | 中文字幕av伊人av无码av | 免费无码的av片在线观看 | 精品夜夜澡人妻无码av蜜桃 | 真人与拘做受免费视频 | 日本精品人妻无码免费大全 | 亚洲男人av香蕉爽爽爽爽 | 国产激情无码一区二区 | 国产人妻精品午夜福利免费 | 国产无av码在线观看 | 久久久精品人妻久久影视 | www一区二区www免费 | 亚洲午夜福利在线观看 | 国产精品人人爽人人做我的可爱 | 国产精品久久久久无码av色戒 | 亚洲 欧美 激情 小说 另类 | 国产精品人人爽人人做我的可爱 | 东京无码熟妇人妻av在线网址 | 精品无码国产一区二区三区av | 全黄性性激高免费视频 | 亚洲乱码日产精品bd | 日韩人妻系列无码专区 | 国产成人精品三级麻豆 | 日日碰狠狠躁久久躁蜜桃 | 久热国产vs视频在线观看 | 少妇的肉体aa片免费 | 成人无码视频在线观看网站 | 东京热男人av天堂 | 永久黄网站色视频免费直播 | 牲欲强的熟妇农村老妇女视频 | 国产精品对白交换视频 | 色一情一乱一伦一视频免费看 | 好爽又高潮了毛片免费下载 | 真人与拘做受免费视频 | 国产美女精品一区二区三区 | 精品水蜜桃久久久久久久 | 中文字幕精品av一区二区五区 | 国产成人无码专区 | 性色欲情网站iwww九文堂 | 成人片黄网站色大片免费观看 | v一区无码内射国产 | 亚洲国产高清在线观看视频 | 偷窥日本少妇撒尿chinese | 少妇愉情理伦片bd | 免费无码av一区二区 | 久久精品国产精品国产精品污 | 亚洲色大成网站www | 欧美国产日韩久久mv | 国产色视频一区二区三区 | 欧美三级a做爰在线观看 | 久久精品中文字幕大胸 | 天天躁日日躁狠狠躁免费麻豆 | 国产偷抇久久精品a片69 | 97久久精品无码一区二区 | 国产超碰人人爽人人做人人添 | 国产成人综合在线女婷五月99播放 | 中文字幕+乱码+中文字幕一区 | 亚洲熟熟妇xxxx | 成人片黄网站色大片免费观看 | 清纯唯美经典一区二区 | 奇米影视7777久久精品 | 少妇无套内谢久久久久 | 麻豆成人精品国产免费 | 一个人看的www免费视频在线观看 | 亚洲综合精品香蕉久久网 | 国产熟妇另类久久久久 | 中文字幕日产无线码一区 | 最新国产麻豆aⅴ精品无码 | 精品国产一区二区三区av 性色 | 日日摸天天摸爽爽狠狠97 | 99精品久久毛片a片 | 久久国语露脸国产精品电影 | 国产九九九九九九九a片 | 国产精品久久久久久无码 |