日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一例智能网卡(mellanox)的网卡故障分析

發布時間:2023/12/20 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一例智能网卡(mellanox)的网卡故障分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景:這個是在centos 7.6.1810的環境上復現的,智能網卡是目前很多
云服務器上的網卡標配,在OPPO主要用于vpc等場景,智能網卡的代碼隨著
功能的增強導致復雜度一直在上升,驅動的bug一直是內核bug中的大頭,在遇到類似問題時,內核開發者由于對驅動代碼不熟悉,排查會比較費勁,本身涉及的背景知識有:dma_pool,dma_page,net_device,mlx5_core_dev設備,設備卸載,uaf問題等,另外,這個bug目測在最新的linux基線也沒有解決,本文單獨拿出來列舉是因為uaf問題相對比較獨特。
下面列一下我們是怎么排查并解決這個問題的。

一、故障現象

OPPO云內核團隊接到連通性告警報障,發現機器復位:

UPTIME: 00:04:16-------------運行的時間很短 LOAD AVERAGE: 0.25, 0.23, 0.11 TASKS: 2027 RELEASE: 3.10.0-1062.18.1.el7.x86_64 MEMORY: 127.6 GB PANIC: "BUG: unable to handle kernel NULL pointer dereference at (null)" PID: 23283 COMMAND: "spider-agent" TASK: ffff9d1fbb090000 [THREAD_INFO: ffff9d1f9a0d8000] CPU: 0 STATE: TASK_RUNNING (PANIC)crash> bt PID: 23283 TASK: ffff9d1fbb090000 CPU: 0 COMMAND: "spider-agent"#0 [ffff9d1f9a0db650] machine_kexec at ffffffffb6665b34#1 [ffff9d1f9a0db6b0] __crash_kexec at ffffffffb6722592#2 [ffff9d1f9a0db780] crash_kexec at ffffffffb6722680#3 [ffff9d1f9a0db798] oops_end at ffffffffb6d85798#4 [ffff9d1f9a0db7c0] no_context at ffffffffb6675bb4#5 [ffff9d1f9a0db810] __bad_area_nosemaphore at ffffffffb6675e82#6 [ffff9d1f9a0db860] bad_area_nosemaphore at ffffffffb6675fa4#7 [ffff9d1f9a0db870] __do_page_fault at ffffffffb6d88750#8 [ffff9d1f9a0db8e0] do_page_fault at ffffffffb6d88975#9 [ffff9d1f9a0db910] page_fault at ffffffffb6d84778[exception RIP: dma_pool_alloc+427]//caq:異常地址RIP: ffffffffb680efab RSP: ffff9d1f9a0db9c8 RFLAGS: 00010046RAX: 0000000000000246 RBX: ffff9d0fa45f4c80 RCX: 0000000000001000RDX: 0000000000000000 RSI: 0000000000000246 RDI: ffff9d0fa45f4c10RBP: ffff9d1f9a0dba20 R8: 000000000001f080 R9: ffff9d00ffc07c00R10: ffffffffc03e10c4 R11: ffffffffb67dd6fd R12: 00000000000080d0R13: ffff9d0fa45f4c10 R14: ffff9d0fa45f4c00 R15: 0000000000000000ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #10 [ffff9d1f9a0dba28] mlx5_alloc_cmd_msg at ffffffffc03e10e3 [mlx5_core]//涉及的模塊 #11 [ffff9d1f9a0dba78] cmd_exec at ffffffffc03e3c92 [mlx5_core] #12 [ffff9d1f9a0dbb18] mlx5_cmd_exec at ffffffffc03e442b [mlx5_core] #13 [ffff9d1f9a0dbb48] mlx5_core_access_reg at ffffffffc03ee354 [mlx5_core] #14 [ffff9d1f9a0dbba0] mlx5_query_port_ptys at ffffffffc03ee411 [mlx5_core] #15 [ffff9d1f9a0dbc10] mlx5e_get_link_ksettings at ffffffffc0413035 [mlx5_core] #16 [ffff9d1f9a0dbce8] __ethtool_get_link_ksettings at ffffffffb6c56d06 #17 [ffff9d1f9a0dbd48] speed_show at ffffffffb6c705b8 #18 [ffff9d1f9a0dbdd8] dev_attr_show at ffffffffb6ab1643 #19 [ffff9d1f9a0dbdf8] sysfs_kf_seq_show at ffffffffb68d709f #20 [ffff9d1f9a0dbe18] kernfs_seq_show at ffffffffb68d57d6 #21 [ffff9d1f9a0dbe28] seq_read at ffffffffb6872a30 #22 [ffff9d1f9a0dbe98] kernfs_fop_read at ffffffffb68d6125 #23 [ffff9d1f9a0dbed8] vfs_read at ffffffffb684a8ff #24 [ffff9d1f9a0dbf08] sys_read at ffffffffb684b7bf #25 [ffff9d1f9a0dbf50] system_call_fastpath at ffffffffb6d8dedeRIP: 00000000004a5030 RSP: 000000c001099378 RFLAGS: 00000212RAX: 0000000000000000 RBX: 000000c000040000 RCX: ffffffffffffffffRDX: 000000000000000a RSI: 000000c00109976e RDI: 000000000000000d---read的文件fd編號RBP: 000000c001099640 R8: 0000000000000000 R9: 0000000000000000R10: 0000000000000000 R11: 0000000000000206 R12: 000000000000000cR13: 0000000000000032 R14: 0000000000f710c4 R15: 0000000000000000ORIG_RAX: 0000000000000000 CS: 0033 SS: 002b

從堆棧看,是某進程讀取文件觸發了一個內核態的空指針引用。

二、故障現象分析

從堆棧信息看:

1、當時進程打開fd編號為13的文件,這個從rdi的值可以看出。

2、speed_show 和 __ethtool_get_link_ksettings 表示在讀取網卡的速率值
下面看下打開的文件是哪個,

crash> files 23283 PID: 23283 TASK: ffff9d1fbb090000 CPU: 0 COMMAND: "spider-agent" ROOT: /rootfs CWD: /rootfs/home/service/app/spiderFD FILE DENTRY INODE TYPE PATH ....9 ffff9d0f5709b200 ffff9d1facc80a80 ffff9d1069a194d0 REG /rootfs/sys/devices/pci0000:3a/0000:3a:00.0/0000:3b:00.0/net/p1p1/speed---這個還在10 ffff9d0f4a45a400 ffff9d0f9982e240 ffff9d0fb7b873a0 REG /rootfs/sys/devices/pci0000:5d/0000:5d:00.0/0000:5e:00.0/net/p3p1/speed---注意對應關系 0000:5e:00.0 對應p3p111 ffff9d0f57098f00 ffff9d1facc80240 ffff9d1069a1b530 REG /rootfs/sys/devices/pci0000:3a/0000:3a:00.0/0000:3b:00.1/net/p1p2/speed---這個還在13 ffff9d0f4a458a00 ffff9d0f9982e0c0 ffff9d0fb7b875f0 REG /rootfs/sys/devices/pci0000:5d/0000:5d:00.0/0000:5e:00.1/net/p3p2/speed---注意對應關系 0000:5e:00.1 對應p3p2 ....

注意上面 pci編號與 網卡名稱的對應關系,后面會用到。
打開文件讀取speed本身應該是一個很常見的流程,
下面從 exception RIP: dma_pool_alloc+427 進一步分析為什么觸發了NULL pointer dereference
展開具體的堆棧如下:

#9 [ffff9d1f9a0db910] page_fault at ffffffffb6d84778[exception RIP: dma_pool_alloc+427]RIP: ffffffffb680efab RSP: ffff9d1f9a0db9c8 RFLAGS: 00010046RAX: 0000000000000246 RBX: ffff9d0fa45f4c80 RCX: 0000000000001000RDX: 0000000000000000 RSI: 0000000000000246 RDI: ffff9d0fa45f4c10RBP: ffff9d1f9a0dba20 R8: 000000000001f080 R9: ffff9d00ffc07c00R10: ffffffffc03e10c4 R11: ffffffffb67dd6fd R12: 00000000000080d0R13: ffff9d0fa45f4c10 R14: ffff9d0fa45f4c00 R15: 0000000000000000ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018ffff9d1f9a0db918: 0000000000000000 ffff9d0fa45f4c00 ffff9d1f9a0db928: ffff9d0fa45f4c10 00000000000080d0 ffff9d1f9a0db938: ffff9d1f9a0dba20 ffff9d0fa45f4c80 ffff9d1f9a0db948: ffffffffb67dd6fd ffffffffc03e10c4 ffff9d1f9a0db958: ffff9d00ffc07c00 000000000001f080 ffff9d1f9a0db968: 0000000000000246 0000000000001000 ffff9d1f9a0db978: 0000000000000000 0000000000000246 ffff9d1f9a0db988: ffff9d0fa45f4c10 ffffffffffffffff ffff9d1f9a0db998: ffffffffb680efab 0000000000000010 ffff9d1f9a0db9a8: 0000000000010046 ffff9d1f9a0db9c8 ffff9d1f9a0db9b8: 0000000000000018 ffffffffb680ee45 ffff9d1f9a0db9c8: ffff9d0faf9fec40 0000000000000000 ffff9d1f9a0db9d8: ffff9d0faf9fec48 ffffffffb682669c ffff9d1f9a0db9e8: ffff9d00ffc07c00 00000000618746c1 ffff9d1f9a0db9f8: 0000000000000000 0000000000000000 ffff9d1f9a0dba08: ffff9d0faf9fec40 0000000000000000 ffff9d1f9a0dba18: ffff9d0fa3c800c0 ffff9d1f9a0dba70 ffff9d1f9a0dba28: ffffffffc03e10e3 #10 [ffff9d1f9a0dba28] mlx5_alloc_cmd_msg at ffffffffc03e10e3 [mlx5_core]ffff9d1f9a0dba30: ffff9d0f4eebee00 0000000000000001 ffff9d1f9a0dba40: 000000d0000080d0 0000000000000050 ffff9d1f9a0dba50: ffff9d0fa3c800c0 0000000000000005 --r12是rdi ,ffff9d0fa3c800c0ffff9d1f9a0dba60: ffff9d0fa3c803e0 ffff9d1f9d87ccc0 ffff9d1f9a0dba70: ffff9d1f9a0dbb10 ffffffffc03e3c92 #11 [ffff9d1f9a0dba78] cmd_exec at ffffffffc03e3c92 [mlx5_core]

從堆棧中取出對應的 mlx5_core_dev 為 ffff9d0fa3c800c0

crash> mlx5_core_dev.cmd ffff9d0fa3c800c0 -xo struct mlx5_core_dev {[ffff9d0fa3c80138] struct mlx5_cmd cmd; } crash> mlx5_cmd.pool ffff9d0fa3c80138pool = 0xffff9d0fa45f4c00------這個就是dma_pool,寫驅動代碼的同學會經常遇到

出問題的代碼行號為:

crash> dis -l dma_pool_alloc+427 -B 5 /usr/src/debug/kernel-3.10.0-1062.18.1.el7/linux-3.10.0-1062.18.1.el7.x86_64/mm/dmapool.c: 334 0xffffffffb680efab <dma_pool_alloc+427>: mov (%r15),%ecx 而對應的r15,從上面的堆棧看,確實是null。305 void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,306 dma_addr_t *handle)307 { ...315 spin_lock_irqsave(&pool->lock, flags);316 list_for_each_entry(page, &pool->page_list, page_list) {317 if (page->offset < pool->allocation)---//caq:當前滿足條件318 goto ready;//caq:跳轉到ready319 }320 321 /* pool_alloc_page() might sleep, so temporarily drop &pool->lock */322 spin_unlock_irqrestore(&pool->lock, flags);323 324 page = pool_alloc_page(pool, mem_flags & (~__GFP_ZERO));325 if (!page)326 return NULL;327 328 spin_lock_irqsave(&pool->lock, flags);329 330 list_add(&page->page_list, &pool->page_list);331 ready:332 page->in_use++;//caq:表示正在引用333 offset = page->offset;//從上次用完的地方開始使用334 page->offset = *(int *)(page->vaddr + offset);//caq:出問題的行號 ...}

從上面的代碼看,page->vaddr為NULL,offset也為0,才會引用NULL,page有兩個來源,

第一種是從pool中的page_list中取,

第二種是從pool_alloc_page臨時申請,當然申請之后會掛入到pool中的page_list,

下面查看一下這個page_list.

crash> dma_pool ffff9d0fa45f4c00 -x struct dma_pool {page_list = {next = 0xffff9d0fa45f4c80, prev = 0xffff9d0fa45f4c00}, lock = {{rlock = {raw_lock = {val = {counter = 0x1}}}}}, size = 0x400, dev = 0xffff9d1fbddec098, allocation = 0x1000, boundary = 0x1000, name = "mlx5_cmd\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", pools = {next = 0xdead000000000100, prev = 0xdead000000000200} }crash> list dma_pool.page_list -H 0xffff9d0fa45f4c00 -s dma_page.offset,vaddr ffff9d0fa45f4c80offset = 0vaddr = 0x0 ffff9d0fa45f4d00offset = 0vaddr = 0x0

從 dma_pool_alloc 函數的代碼邏輯看,pool->page_list確實不為空,而且滿足
if (page->offset < pool->allocation) 的條件,所以第一個page應該是 ffff9d0fa45f4c80
也就是從第一種情況取出的:

crash> dma_page ffff9d0fa45f4c80 struct dma_page {page_list = {next = 0xffff9d0fa45f4d00, prev = 0xffff9d0fa45f4c80}, vaddr = 0x0, //caq:這個異常,引用這個將導致crashdma = 0, in_use = 1, //caq:這個標記為在使用,符合page->in_use++;offset = 0 }

問題分析到這里,因為dma_pool中的page,申請之后,vaddr都會初始化,
一般在pool_alloc_page 中進行初始化,怎么可能會NULL呢?
然后查看一下這個地址:

crash> kmem ffff9d0fa45f4c80-------這個是dma_pool中的page CACHE NAME OBJSIZE ALLOCATED TOTAL SLABS SSIZE ffff9d00ffc07900 kmalloc-128//caq:注意這個長度 128 8963 14976 234 8kSLAB MEMORY NODE TOTAL ALLOCATED FREEffffe299c0917d00 ffff9d0fa45f4000 0 64 29 35FREE / [ALLOCATED]ffff9d0fa45f4c80 PAGE PHYSICAL MAPPING INDEX CNT FLAGS ffffe299c0917d00 10245f4000 0 ffff9d0fa45f4c00 1 2fffff00004080 slab,head

由于以前用過類似的dma函數,印象中dma_page沒有這么大,再看看第二個dma_page如下:

crash> kmem ffff9d0fa45f4d00 CACHE NAME OBJSIZE ALLOCATED TOTAL SLABS SSIZE ffff9d00ffc07900 kmalloc-128 128 8963 14976 234 8kSLAB MEMORY NODE TOTAL ALLOCATED FREEffffe299c0917d00 ffff9d0fa45f4000 0 64 29 35FREE / [ALLOCATED]ffff9d0fa45f4d00 PAGE PHYSICAL MAPPING INDEX CNT FLAGS ffffe299c0917d00 10245f4000 0 ffff9d0fa45f4c00 1 2fffff00004080 slab,headcrash> dma_page ffff9d0fa45f4d00 struct dma_page {page_list = {next = 0xffff9d0fa45f5000, prev = 0xffff9d0fa45f4d00}, vaddr = 0x0, -----------caq:也是nulldma = 0, in_use = 0, offset = 0 }crash> list dma_pool.page_list -H 0xffff9d0fa45f4c00 -s dma_page.offset,vaddr ffff9d0fa45f4c80offset = 0vaddr = 0x0 ffff9d0fa45f4d00offset = 0vaddr = 0x0 ffff9d0fa45f5000offset = 0vaddr = 0x0 .........

看來不僅是第一個dma_page有問題,所有在pool中的dma_page單元都一樣,
那直接查看一下dma_page的正常大小:

crash> p sizeof(struct dma_page) $3 = 40

按道理長度才40字節,就算申請slab的話,也應該擴展為64字節才對,怎么可能像上面那個dma_page一樣是128字節呢?為了解開這個疑惑,找一個正常的其他節點對比一下:

crash> netNET_DEVICE NAME IP ADDRESS(ES) ffff8f9e800be000 lo 127.0.0.1 ffff8f9e62640000 p1p1 ffff8f9e626c0000 p1p2 ffff8f9e627c0000 p3p1 -----//caq:以這個為例 ffff8f9e62100000 p3p2 然后根據代碼:通過net_device查看mlx5e_priv:static?int?mlx5e_get_link_ksettings(struct?net_device?*netdev,struct?ethtool_link_ksettings?*link_ksettings) { ...struct?mlx5e_priv?*priv????=?netdev_priv(netdev); ... }static inline void *netdev_priv(const struct net_device *dev) {return (char *)dev + ALIGN(sizeof(struct net_device), NETDEV_ALIGN); }crash> px sizeof(struct net_device) $2 = 0x8c0crash> mlx5e_priv.mdev ffff8f9e627c08c0---根據偏移計算mdev = 0xffff8f9e67c400c0crash> mlx5_core_dev.cmd 0xffff8f9e67c400c0 -xo struct mlx5_core_dev {[ffff8f9e67c40138] struct mlx5_cmd cmd; }crash> mlx5_cmd.pool ffff8f9e67c40138pool = 0xffff8f9e7bf48f80crash> dma_pool 0xffff8f9e7bf48f80 struct dma_pool {page_list = {next = 0xffff8f9e79c60880, //caq:其中的一個dma_pageprev = 0xffff8fae6e4db800}, .......size = 1024, dev = 0xffff8f9e800b3098, allocation = 4096, boundary = 4096, name = "mlx5_cmd\000\217\364{\236\217\377\377\300\217\364{\236\217\377\377\200\234>\250\217\217\377\377", pools = {next = 0xffff8f9e800b3290, prev = 0xffff8f9e800b3290} } crash> dma_page 0xffff8f9e79c60880 //caq:查看這個dma_page struct dma_page {page_list = {next = 0xffff8f9e79c60840, -------其中的一個dma_pageprev = 0xffff8f9e7bf48f80}, vaddr = 0xffff8f9e6fc9b000, //caq:正常vaddr不可能會NULL的dma = 69521223680, in_use = 0, offset = 0 }crash> kmem 0xffff8f9e79c60880 CACHE NAME OBJSIZE ALLOCATED TOTAL SLABS SSIZE ffff8f8fbfc07b00 kmalloc-64--正常長度 64 667921 745024 11641 4kSLAB MEMORY NODE TOTAL ALLOCATED FREEffffde5140e71800 ffff8f9e79c60000 0 64 64 0FREE / [ALLOCATED][ffff8f9e79c60880]PAGE PHYSICAL MAPPING INDEX CNT FLAGS ffffde5140e71800 1039c60000 0 0 1 2fffff00000080 slab

以上操作要求對net_device和mlx5相關驅動代碼比較熟悉。
相比于異常的dma_page,正常的dma_page是一個64字節的slab,所以很明顯,
要么這個是一個踩內存問題,要么是一個uaf(used after free )問題。
一般問題查到這,怎么快速判斷是哪一種類型呢?因為這兩種問題,涉及到內存紊亂,一般都比較難查,這時候需要跳出來,我們先看一下其他運行進程的情況,找到了一個進程如下:

crash> bt 48263 PID: 48263 TASK: ffff9d0f4ee0a0e0 CPU: 56 COMMAND: "reboot"#0 [ffff9d0f95d7f958] __schedule at ffffffffb6d80d4a#1 [ffff9d0f95d7f9e8] schedule at ffffffffb6d811f9#2 [ffff9d0f95d7f9f8] schedule_timeout at ffffffffb6d7ec48#3 [ffff9d0f95d7faa8] wait_for_completion_timeout at ffffffffb6d81ae5#4 [ffff9d0f95d7fb08] cmd_exec at ffffffffc03e41c9 [mlx5_core]#5 [ffff9d0f95d7fba8] mlx5_cmd_exec at ffffffffc03e442b [mlx5_core]#6 [ffff9d0f95d7fbd8] mlx5_core_destroy_mkey at ffffffffc03f085d [mlx5_core]#7 [ffff9d0f95d7fc40] mlx5_mr_cache_cleanup at ffffffffc0c60aab [mlx5_ib]#8 [ffff9d0f95d7fca8] mlx5_ib_stage_pre_ib_reg_umr_cleanup at ffffffffc0c45d32 [mlx5_ib]#9 [ffff9d0f95d7fcc0] __mlx5_ib_remove at ffffffffc0c4f450 [mlx5_ib] #10 [ffff9d0f95d7fce8] mlx5_ib_remove at ffffffffc0c4f4aa [mlx5_ib] #11 [ffff9d0f95d7fd00] mlx5_detach_device at ffffffffc03fe231 [mlx5_core] #12 [ffff9d0f95d7fd30] mlx5_unload_one at ffffffffc03dee90 [mlx5_core] #13 [ffff9d0f95d7fd60] shutdown at ffffffffc03def80 [mlx5_core] #14 [ffff9d0f95d7fd80] pci_device_shutdown at ffffffffb69d1cda #15 [ffff9d0f95d7fda8] device_shutdown at ffffffffb6ab3beb #16 [ffff9d0f95d7fdd8] kernel_restart_prepare at ffffffffb66b7916 #17 [ffff9d0f95d7fde8] kernel_restart at ffffffffb66b7932 #18 [ffff9d0f95d7fe00] SYSC_reboot at ffffffffb66b7ba9 #19 [ffff9d0f95d7ff40] sys_reboot at ffffffffb66b7c4e #20 [ffff9d0f95d7ff50] system_call_fastpath at ffffffffb6d8dedeRIP: 00007fc9be7a5226 RSP: 00007ffd9a19e448 RFLAGS: 00010246RAX: 00000000000000a9 RBX: 0000000000000004 RCX: 0000000000000000RDX: 0000000001234567 RSI: 0000000028121969 RDI: fffffffffee1deadRBP: 0000000000000002 R8: 00005575d529558c R9: 0000000000000000R10: 00007fc9bea767b8 R11: 0000000000000206 R12: 0000000000000000R13: 00007ffd9a19e690 R14: 0000000000000000 R15: 0000000000000000ORIG_RAX: 00000000000000a9 CS: 0033 SS: 002b

為什么會關注這個進程,因為這么多年以來,因為卸載模塊引發的uaf問題排查不低于20次了,有時候是reboot,有時候是unload,有時候是在work中釋放資源,所以直覺上,覺得和這個卸載有很大關系。下面分析一下,reboot流程里面操作到哪了。

2141 void device_shutdown(void)2142 {2143 struct device *dev, *parent;2144 2145 spin_lock(&devices_kset->list_lock);2146 /*2147 * Walk the devices list backward, shutting down each in turn.2148 * Beware that device unplug events may also start pulling2149 * devices offline, even as the system is shutting down.2150 */2151 while (!list_empty(&devices_kset->list)) {2152 dev = list_entry(devices_kset->list.prev, struct device,2153 kobj.entry); ........2178 if (dev->device_rh && dev->device_rh->class_shutdown_pre) {2179 if (initcall_debug)2180 dev_info(dev, "shutdown_pre\n");2181 dev->device_rh->class_shutdown_pre(dev);2182 }2183 if (dev->bus && dev->bus->shutdown) {2184 if (initcall_debug)2185 dev_info(dev, "shutdown\n");2186 dev->bus->shutdown(dev);2187 } else if (dev->driver && dev->driver->shutdown) {2188 if (initcall_debug)2189 dev_info(dev, "shutdown\n");2190 dev->driver->shutdown(dev);2191 }}

從上面代碼看出以下兩點:

1、每個device 的 kobj.entry 成員串接在 devices_kset->list 中。

2、每個設備的shutdown流程從 device_shutdown 看是串行的。

從reboot 的堆棧看,卸載一個 mlx設備的流程包含如下:

pci_device_shutdown–>shutdown–>mlx5_unload_one–>mlx5_detach_device
–>mlx5_cmd_cleanup–>dma_pool_destroy

mlx5_detach_device的流程分支為:

void dma_pool_destroy(struct dma_pool *pool) { .......while (!list_empty(&pool->page_list)) {//caq:將pool中的dma_page一一刪除struct dma_page *page;page = list_entry(pool->page_list.next,struct dma_page, page_list);if (is_page_busy(page)) { .......list_del(&page->page_list);kfree(page);} elsepool_free_page(pool, page);//每個dma_page去釋放}kfree(pool);//caq:釋放pool ....... }static void pool_free_page(struct dma_pool *pool, struct dma_page *page) {dma_addr_t dma = page->dma;#ifdef DMAPOOL_DEBUGmemset(page->vaddr, POOL_POISON_FREED, pool->allocation); #endifdma_free_coherent(pool->dev, pool->allocation, page->vaddr, dma);list_del(&page->page_list);//caq:釋放后會將page_list成員毒化kfree(page); }

從reboot的堆棧中,查看對應的 信息

#4 [ffff9d0f95d7fb08] cmd_exec at ffffffffc03e41c9 [mlx5_core]ffff9d0f95d7fb10: ffffffffb735b580 ffff9d0f904caf18 ffff9d0f95d7fb20: ffff9d00ff801da8 ffff9d0f23121200 ffff9d0f95d7fb30: ffff9d0f23121740 ffff9d0fa7480138 ffff9d0f95d7fb40: 0000000000000000 0000001002020000 ffff9d0f95d7fb50: 0000000000000000 ffff9d0f95d7fbe8 ffff9d0f95d7fb60: ffff9d0f00000000 0000000000000000 ffff9d0f95d7fb70: 00000000756415e3 ffff9d0fa74800c0 ----mlx5_core_dev設備,對應的是 p3p1,ffff9d0f95d7fb80: ffff9d0f95d7fbf8 ffff9d0f95d7fbe8 ffff9d0f95d7fb90: 0000000000000246 ffff9d0f8f3a20b8 ffff9d0f95d7fba0: ffff9d0f95d7fbd0 ffffffffc03e442b #5 [ffff9d0f95d7fba8] mlx5_cmd_exec at ffffffffc03e442b [mlx5_core]ffff9d0f95d7fbb0: 0000000000000000 ffff9d0fa74800c0 ffff9d0f95d7fbc0: ffff9d0f8f3a20b8 ffff9d0fa74bea00 ffff9d0f95d7fbd0: ffff9d0f95d7fc38 ffffffffc03f085d #6 [ffff9d0f95d7fbd8] mlx5_core_destroy_mkey at ffffffffc03f085d [mlx5_core]

要注意,reboot正在釋放的 mlx5_core_dev 是 ffff9d0fa74800c0,這個設備對應的net_device是:
p3p1,而 23283 進程正在訪問的 mlx5_core_dev 是 ffff9d0fa3c800c0 ,對應的是 p3p2。

crash> netNET_DEVICE NAME IP ADDRESS(ES) ffff9d0fc003e000 lo 127.0.0.1 ffff9d1fad200000 p1p1 ffff9d0fa0700000 p1p2 ffff9d0fa00c0000 p3p1 對應的 mlx5_core_dev 是 ffff9d0fa74800c0 ffff9d0fa0200000 p3p2 對應的 mlx5_core_dev 是 ffff9d0fa3c800c0

我們看下目前還殘留在 devices_kset 中的device:

crash> p devices_kset devices_kset = $4 = (struct kset *) 0xffff9d1fbf4e70c0 crash> p devices_kset.list $5 = {next = 0xffffffffb72f2a38, prev = 0xffff9d0fbe0ea130 }crash> list -H -o 0x18 0xffffffffb72f2a38 -s device.kobj.name >device.list我們發現p3p1 與 p3p2均不在 device.list中,[root@it202-seg-k8s-prod001-node-10-27-96-220 127.0.0.1-2020-12-07-10:58:06]# grep 0000:5e:00.0 device.list //caq:未找到 這個是 p3p1,當前reboot流程正在卸載。 [root@it202-seg-k8s-prod001-node-10-27-96-220 127.0.0.1-2020-12-07-10:58:06]# grep 0000:5e:00.1 device.list //caq:未找到,這個是 p3p2,已經卸載完 [root@it202-seg-k8s-prod001-node-10-27-96-220 127.0.0.1-2020-12-07-10:58:06]# grep 0000:3b:00.0 device.list //caq:這個mlx5設備還沒unloadkobj.name = 0xffff9d1fbe82aa70 "0000:3b:00.0", [root@it202-seg-k8s-prod001-node-10-27-96-220 127.0.0.1-2020-12-07-10:58:06]# grep 0000:3b:00.1 device.list //caq:這個mlx5設備還沒unloadkobj.name = 0xffff9d1fbe82aae0 "0000:3b:00.1",

由于 p3p2 與 p3p1均不在 device.list中,而根據 pci_device_shutdown的串行卸載流程,當前正在卸載的是 p3p1,所以很確定的是 23283 進程訪問的是卸載后的cmd_pool,根據前面描述的卸載流程 :
pci_device_shutdown–>shutdown–>mlx5_unload_one–>mlx5_cmd_cleanup–>dma_pool_destroy
此時的pool已經被釋放了,pool中的dma_page均無效的。

然后嘗試google對應的bug,查看到一個跟當前現象極為相似,redhat遇到了類似的問題:https://access.redhat.com/solutions/5132931

但是,紅帽在這個鏈接中認為解決了uaf的問題,合入的補丁卻是:

commit 4cca96a8d9da0ed8217cfdf2aec0c3c8b88e8911 Author: Parav Pandit <parav@mellanox.com> Date: Thu Dec 12 13:30:21 2019 +0200diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c index 997cbfe..05b557d 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c @@ -6725,6 +6725,8 @@ void __mlx5_ib_remove(struct mlx5_ib_dev *dev,const struct mlx5_ib_profile *profile,int stage){ + dev->ib_active = false; +/* Number of stages to cleanup */while (stage) {stage--;

敲黑板,三遍:
這個合入是不能解決對應的bug的,比如如下的并發:
我們用一個簡單的圖來表示一下并發處理:

CPU1 CPU2dev_attr_showpci_device_shutdown speed_showshutdown mlx5_unload_onemlx5_detach_devicemlx5_detach_interfacemlx5e_detachmlx5e_detach_netdevmlx5e_nic_disablertnl_lockmlx5e_close_locked clear_bit(MLX5E_STATE_OPENED, &priv->state);---只清理了這個bitrtnl_unlock rtnl_trylock---持鎖成功后netif_running 只是判斷net_device.state的最低位__ethtool_get_link_ksettingsmlx5e_get_link_ksettingsmlx5_query_port_ptys()mlx5_core_access_reg()mlx5_cmd_execcmd_execmlx5_alloc_cmd_msgmlx5_cmd_cleanup---清理dma_pool dma_pool_alloc---訪問cmd.pool,觸發crash

所以如果要真正解決這個問題,還需要 netif_device_detach 中清理 __LINK_STATE_START的bit位,或者在 speed_show 中判斷一下 __LINK_STATE_PRESENT 位?如果考慮影響范圍,不想動公共流程,則應該
在 mlx5e_get_link_ksettings 中判斷一下 __LINK_STATE_PRESENT。
這個就留給喜歡跟社區打交道的同學去完善吧。

static void mlx5e_nic_disable(struct mlx5e_priv *priv) { .......rtnl_lock();if (netif_running(priv->netdev))mlx5e_close(priv->netdev);netif_device_detach(priv->netdev);//caq:增加一下清理 __LINK_STATE_PRESENT位 rtnl_unlock(); .......

三、故障復現

1、競態問題,可以制造類似上圖cpu1 與cpu2 的競爭場景。

四、故障規避或解決

可能的解決方案是:

1、不要按照紅帽https://access.redhat.com/solutions/5132931那樣升級。

2、單獨打補丁。

作者簡介

Anqing

目前在OPPO混合云負責linux內核及容器,虛擬機等虛擬化方面的工作

獲取更多精彩內容,請掃碼關注[OPPO數智技術]公眾號

總結

以上是生活随笔為你收集整理的一例智能网卡(mellanox)的网卡故障分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久这里只有精品1 | 久久精品久久99 | 91精品国产99久久久久久红楼 | 亚洲精品免费观看视频 | 久久久美女 | 天天干天天操天天射 | 日韩在线观看av | 青青草国产免费 | 日女人免费视频 | 免费国产一区二区 | 91看片一区二区三区 | 狠狠的操狠狠的干 | 日本xxxx裸体xxxx17 | 九热在线 | 亚洲精品午夜一区人人爽 | 国产综合在线观看视频 | 在线天堂v | 欧美不卡在线 | 日本h在线播放 | 午夜精品久久一牛影视 | 久久久久国产精品www | 国产视频精品免费播放 | 欧美一区二区三区免费观看 | 在线精品视频免费播放 | 久久99热这里只有精品 | 操操日| 精品黄色在线观看 | 久草在线中文888 | 久久精品视频在线免费观看 | 国产精品第54页 | 天天色天天操天天爽 | 美女视频国产 | 日韩中文免费视频 | 精品久久久免费视频 | 99视频精品免费视频 | 五月婷婷在线播放 | 综合天堂av久久久久久久 | 91入口在线观看 | 手机在线黄色网址 | 91精品免费| 天天干com| 人人干人人艹 | 五月婷婷色综合 | 日韩一区正在播放 | 久久一区国产 | 国产精品1区2区在线观看 | 色小说av | 婷婷五综合 | 国产91影视 | 欧美日产一区 | 精品一二三区视频 | 啪啪动态视频 | www.五月婷婷 | 在线观看你懂的网站 | 久久激情小说 | 色姑娘综合网 | 久久伊人91 | 欧美二区三区91 | 国产精品久久久久aaaa | 国产高清久久久久 | 久久久男人的天堂 | 五月婷婷激情 | 91色偷偷 | 在线观看 亚洲 | 中文字幕成人一区 | 国产精品18久久久久久vr | 中文字幕乱在线伦视频中文字幕乱码在线 | 91最新视频 | 久久不卡日韩美女 | 成人一级电影在线观看 | 国产群p视频 | 婷婷电影在线观看 | 久久精品国产亚洲精品2020 | 亚洲精品tv久久久久久久久久 | 亚洲精品91天天久久人人 | 久久精品一区二区三区中文字幕 | 伊人久久在线观看 | 欧美精品天堂 | 亚洲一区二区黄色 | 黄色特级毛片 | 国产资源在线播放 | 日韩天天干 | 免费看v片网站 | 国产麻豆精品一区 | 大片网站久久 | 亚洲一级片在线看 | 日韩动漫免费观看高清完整版在线观看 | 久久伊人八月婷婷综合激情 | 欧美一级电影 | 成人小电影在线看 | 热久久国产精品 | 亚洲黄色大片 | 国产h在线播放 | 麻豆国产露脸在线观看 | 狠色狠色综合久久 | 日韩免费一级a毛片在线播放一级 | 97视频久久久 | 狠狠躁日日躁狂躁夜夜躁av | 97在线精品国自产拍中文 | 亚洲成人精品久久 | 久久视频一区 | 久久精品国产免费观看 | 成人黄色片免费 | 婷婷www| 精品国产精品国产偷麻豆 | 91成人看片 | 国产亚洲精品久久久久秋 | 九九热在线观看 | 欧女人精69xxxxxx | www.狠狠插.com| 91精品91 | 国产在线播放一区二区 | 深爱婷婷久久综合 | 成人免费ⅴa| 88av色| 国产999精品 | 在线一区av | 人人射| 日韩天天干 | 丁香婷婷久久久综合精品国产 | 最近中文字幕国语免费高清6 | 久在线观看 | 国产中文字幕在线视频 | 成人试看120秒 | 日本aaa在线观看 | 91精品天码美女少妇 | 国产精品综合久久久久 | 国内精品久久久久影院一蜜桃 | 亚洲一级电影视频 | 亚洲天堂网在线视频观看 | 久久综合婷婷国产二区高清 | 在线观看黄色大片 | 久久综合九色综合欧美就去吻 | 久久国产精品一区二区三区 | 国产99久久久国产精品免费二区 | 九九热在线视频免费观看 | 悠悠av资源片 | 久久理论电影网 | 91香蕉视频 | 日本激情中文字幕 | 在线综合 亚洲 欧美在线视频 | 久久成人国产精品入口 | 国产精品久久一区二区无卡 | 亚洲欧美在线综合 | 国产一级电影在线 | 亚洲综合最新在线 | 91污视频在线观看 | 奇米影视777影音先锋 | 日韩欧美视频在线播放 | 国产精品免费成人 | 久久在现 | 91免费网站在线观看 | 久久艹艹| www.色爱| 日韩中文字幕在线 | www五月天com | 狠狠干美女 | 国产精品美女网站 | 日韩美av在线 | www.人人草 | 麻豆一二| 黄色av观看 | 91成人网在线观看 | 91免费观看视频在线 | 男女全黄一级一级高潮免费看 | 午夜精品久久久久久久99无限制 | 久久99免费观看 | 韩国一区二区三区在线观看 | 在线黄色国产 | 久草| av韩国在线 | 99爱视频在线观看 | 在线天堂日本 | 亚洲国产午夜精品 | 国产99在线免费 | 日韩一区在线免费观看 | 四虎成人精品永久免费av | .精品久久久麻豆国产精品 亚洲va欧美 | 国产一区二区在线免费播放 | 久草在线视频网 | 男女免费av | av在线观 | 久久久人 | www激情com| 天天做天天看 | 中文字幕日本在线 | 激情小说 五月 | 日韩高清一 | 欧美日韩国产综合网 | 日韩av快播电影网 | 91精品国自产在线观看欧美 | 色网av| 精品久久久久亚洲 | 亚洲精品视频国产 | 欧美日韩首页 | 97av视频| 亚洲精品国产精品久久99 | 成人av资源在线 | 丁香五月网久久综合 | 久久久久久久久久久福利 | 免费在线观看av网站 | 天天天天天天干 | 国产亚洲欧美在线视频 | 亚洲天天草 | 热久精品 | 激情综合网在线观看 | 2019中文在线观看 | 一级免费看视频 | 亚洲精品观看 | 欧美日韩高清一区二区 国产亚洲免费看 | 亚洲欧美在线观看视频 | 九九免费在线观看视频 | a国产精品 | 国产精品一区久久久久 | 国产成人一区二区三区久久精品 | 国产精品毛片一区视频播不卡 | 人人澡澡人人 | 国产成人精品久久久久蜜臀 | 国产精品久久久久久久av电影 | 成人三级av | 网站在线观看日韩 | 婷婷色中文字幕 | 日本精品久久 | 色av网站 | 美女网站一区 | 久久99这里只有精品 | 久久亚洲欧美日韩精品专区 | 91精品啪在线观看国产81旧版 | 亚洲激情一区二区三区 | 国内精品国产三级国产aⅴ久 | 97超碰在线资源 | 免费精品在线观看 | 最近2019好看的中文字幕免费 | 国产成人av一区二区三区在线观看 | 99精彩视频在线观看免费 | 91亚洲综合 | 欧美成年人在线观看 | 国产最新视频在线观看 | 亚洲专区免费观看 | 99在线观看免费视频精品观看 | 久久久久人人 | 免费观看mv大片高清 | 久久久网 | 国产亚洲人成网站在线观看 | 在线免费观看视频 | 一本一本久久a久久精品综合 | 五月婷婷久久丁香 | 亚洲电影成人 | 日韩成人精品一区二区三区 | 色久网 | 999电影免费在线观看 | 日日爱视频 | 伊人国产女| www免费黄色 | 国产一性一爱一乱一交 | 国产人成免费视频 | 久久久网| 97视频网址| 久草综合在线 | 国产成人福利在线观看 | av爱干| 人人要人人澡人人爽人人dvd | 丁香婷婷综合激情五月色 | 99久久精品网| 午夜精品一区二区国产 | 激情综合网色播五月 | 久久精品99视频 | 国产精品第一 | 麻豆国产精品一区二区三区 | 久久精品2 | 99精彩视频在线观看免费 | 久久久麻豆视频 | 美女在线免费观看视频 | 久久综合免费 | 爱情影院aqdy鲁丝片二区 | 日日爱网址 | 久久久久99精品国产片 | 国产精品久久久久久久久久免费看 | 91视频这里只有精品 | 国产精品日韩欧美 | 免费福利影院 | 久久99久久精品 | 色综合久久88色综合天天 | 成人中文字幕av | 久久精品亚洲国产 | 色婷婷 亚洲 | 国产伦精品一区二区三区无广告 | 91福利视频网站 | 日本一区二区免费在线观看 | 国产三级精品三级在线观看 | 亚洲在线资源 | www.日本色 | 五月天激情电影 | 又黄又爽又刺激的视频 | 欧美色久| 成人亚洲免费 | 99精品视频观看 | 五月婷色 | 国产专区一 | 亚洲人天堂 | 五月天中文字幕 | 中文在线8资源库 | 日韩超碰| 精品色综合 | 国产精品欧美精品 | 人人澡人人添人人爽一区二区 | 91九色视频在线播放 | 一区二区中文字幕在线播放 | 黄色精品视频 | 观看免费av | 波多野结衣在线视频一区 | 在线视频1卡二卡三卡 | 欧美一级专区免费大片 | 欧美日韩国产在线精品 | 91视频一8mav | 五月婷婷开心 | 国产v在线播放 | 最近中文字幕在线中文高清版 | 国产剧情一区在线 | 国产精品免费人成网站 | 99视频导航 | 国产精品国产亚洲精品看不卡 | 国产日韩中文在线 | 亚洲欧洲日韩在线观看 | 国产大尺度视频 | 九九在线国产视频 | 综合色站导航 | 久精品一区 | 国产精品av电影 | 五月婷av | 国产精品99久久久精品 | 91成人在线观看喷潮 | 色婷婷色| 欧美一区成人 | 久久午夜羞羞影院 | 久久综合狠狠综合 | 成年人免费在线观看网站 | 欧美日韩精品在线一区二区 | 99热99| 日韩av高清在线观看 | 日韩av黄 | 毛片一区二区 | 国产精品你懂的在线观看 | 日日爽天天 | 99色资源 | 看片一区二区三区 | 午夜视频在线网站 | 欧美一级大片在线观看 | 国产精品久久9 | 国内成人av| 一本一本久久a久久精品综合妖精 | 成人毛片在线视频 | 免费观看91视频大全 | 日日干影院 | 夜夜骑天天操 | 九九热精品视频在线播放 | 97国产精品 | 日韩有码在线播放 | 在线国产视频一区 | 人人超在线公开视频 | www.99久久.com | 一本—道久久a久久精品蜜桃 | 在线免费视频一区 | 91日韩精品 | zzijzzij日本成熟少妇 | 亚洲成av人影片在线观看 | 日韩黄色免费在线观看 | 天天插天天操天天干 | 色偷偷男人的天堂av | 日韩精品亚洲专区在线观看 | 成人a视频在线观看 | 一区二区三区电影大全 | 欧洲精品码一区二区三区免费看 | 色噜噜在线观看视频 | 亚洲精品美女久久17c | 一区二区三区日韩在线 | 久久男女视频 | 久久精品国产亚洲 | 国产爽视频 | 成人av资源站 | 免费成人在线视频网站 | 国际精品网 | 在线观看国产高清视频 | 中文字幕视频一区二区 | 精品av在线播放 | 黄色毛片视频 | 欧美日韩免费观看一区=区三区 | 玖玖爱在线观看 | 亚洲黄色一级电影 | 349k.cc看片app| 亚洲成av人影片在线观看 | 色婷婷婷 | 久久手机免费视频 | 狠狠躁日日躁狂躁夜夜躁 | 国产成人亚洲在线观看 | 91成人网在线 | 美女免费黄视频网站 | 国产精品免费人成网站 | 久久国产影视 | 亚洲视频电影在线 | 九九免费在线看完整版 | 亚洲欧美成人综合 | 久草精品视频 | 99精品视频一区二区 | 久久99网 | 天天操天天操一操 | 国产亚洲精品久久久久久久久久久久 | 国产精品igao视频网入口 | 在线观看深夜视频 | 日韩精品免费一线在线观看 | 国产一区二区三区 在线 | 91在线观| 91丨精品丨蝌蚪丨白丝jk | 波多野结衣综合网 | 中文字幕综合在线 | 国产高清视频在线播放一区 | 超碰最新网址 | 国模精品在线 | 永久免费观看视频 | 国产麻豆剧果冻传媒视频播放量 | 国产精成人品免费观看 | 色综合天天狠天天透天天伊人 | 麻豆视频免费版 | 日产中文字幕 | 久久久久久久久久电影 | 久久久久久久免费观看 | 欧美黑人性爽 | 天天射天天搞 | 玖玖综合网 | 天天射天天干天天插 | 国产淫a | 91精品国产一区二区三区 | 国产手机免费视频 | 香蕉久久久久久久 | 中国一级片在线 | av理论电影 | 丁香六月婷婷开心 | 麻豆国产露脸在线观看 | av在线一二三区 | 天天看天天干天天操 | 国产精品久久久久久妇 | 黄av资源 | 成人a级大片 | 九九视频热| 正在播放一区 | 国产精品毛片一区二区在线看 | 天天操天天舔天天干 | 最近最新中文字幕视频 | 欧美精选一区二区三区 | 91亚洲在线 | 亚洲欧美一区二区三区孕妇写真 | 久久99国产精品二区护士 | 人人爽人人爽人人爽学生一级 | 激情伊人五月天久久综合 | 久久日本视频 | 6699私人影院 | 欧美成人精品三级在线观看播放 | 91超碰在线播放 | 中文字幕丝袜美腿 | 美女黄濒| 在线视频日韩欧美 | 日韩午夜电影院 | 久草亚洲视频 | 天天夜操| 亚洲1区 在线 | 亚洲精品tv久久久久久久久久 | aav在线| 最新av电影网址 | 国产中文字幕视频在线 | 国产精品久久 | 亚洲韩国一区二区三区 | 日日爱av | 又黄又爽的视频在线观看网站 | 亚洲精品小视频 | 在线99视频| 91成人免费在线视频 | 国产精品九九热 | 国际av在线 | 国产成人一区二区三区免费看 | 日日干网址 | 久久久久国产一区二区三区四区 | 午夜性色| 欧美超碰在线 | 欧美精品久久 | 一本一本久久a久久精品综合妖精 | 在线观看中文字幕2021 | 国产成人一区二区三区 | 开心综合网 | 亚洲精品在线观看免费 | 免费在线国产视频 | 在线观看国产成人av片 | 一区二区三区中文字幕在线 | 久久久综合香蕉尹人综合网 | 日本在线观看一区二区 | 色婷婷激情四射 | 日韩视频一区二区在线 | 天天色中文| 久久夜夜夜 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品久久久 | 人人插人人澡 | 中文字幕av免费在线观看 | 亚洲更新最快 | 亚洲国产精品电影 | 欧美日韩二区三区 | 日日天天av | 中文字幕久久久精品 | 日韩欧美在线观看一区二区 | 最新国产在线视频 | 色播五月激情五月 | 少妇bbw搡bbbb搡bbb | 国产精品日韩久久久久 | 亚洲国产精品激情在线观看 | 在线影院中文字幕 | 国产精品原创 | 久久视频在线观看中文字幕 | 久久女教师 | 欧美精品乱码99久久影院 | 中文字幕你懂的 | 精品三级av | 欧美日韩高清不卡 | 国内精品久久久久影院优 | 激情欧美丁香 | 成年人免费在线看 | 精品国产免费久久 | 天天射日 | 日韩免费电影网 | 国产精品精品国产色婷婷 | 综合伊人av | 国产电影一区二区三区四区 | 国内偷拍精品视频 | 国产精品 亚洲精品 | 久久久久久国产精品久久 | 蜜臀av在线一区二区三区 | 9ⅰ精品久久久久久久久中文字幕 | 91亚洲精品久久久久图片蜜桃 | 成人蜜桃视频 | 99热这里只有精品国产首页 | 欧美精品在线视频观看 | 亚洲精品视频在线免费播放 | 久久国产精品99久久久久久进口 | 视频一区二区精品 | 日韩欧美国产视频 | 999日韩| 欧美精选一区二区三区 | 四虎在线免费视频 | 国产一区观看 | 成人av一区二区兰花在线播放 | 日本三级香港三级人妇99 | 亚洲另类视频在线 | 天天插天天爱 | 青青河边草免费直播 | 欧美在线观看禁18 | 91精品黄色 | 一区二区三区动漫 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产专区一 | av久久久久久 | 日韩成人av在线 | 亚洲激情在线播放 | 国产专区在线看 | 国产玖玖在线 | 国产精品18久久久久久久久久久久 | 亚洲三级网站 | 蜜桃av久久久亚洲精品 | 蜜桃视频在线观看一区 | 久久精品影视 | 91热这里只有精品 | 久草在线手机视频 | 日韩欧美综合在线视频 | 91 中文字幕| 97在线观看视频 | 亚洲精品ww | 精品久久久久亚洲 | 成人网大片| 国产一区不卡在线 | 国产福利91精品一区 | 最新久久免费视频 | 国产香蕉视频在线观看 | 久久久午夜精品福利内容 | 热99在线 | 五月婷视频 | 9999亚洲| 最近av在线| 久草在线在线精品观看 | 玖玖精品在线 | 91九色国产蝌蚪 | 国内丰满少妇猛烈精品播 | 亚洲精品国精品久久99热 | 天天干天天弄 | 深爱激情综合 | 久久伦理影院 | 黄色av电影免费观看 | 五月天狠狠操 | 91传媒视频在线观看 | 国产精品资源 | 亚洲视频,欧洲视频 | 久久精品一区二区三区中文字幕 | 日本久久免费电影 | 激情丁香5月| 久久久国产精品视频 | 欧美另类xxx| 一二区精品 | 亚洲精品视频第一页 | 97av色| 视频成人免费 | 国产精品精品国产色婷婷 | 免费看一级黄色大全 | 国产裸体永久免费视频网站 | 欧美精彩视频在线观看 | 特级西西人体444是什么意思 | 亚洲一区 影院 | 天堂av在线免费 | 成年人免费电影 | 999成人| 亚洲综合视频网 | 亚洲成av片人久久久 | 日日躁夜夜躁aaaaxxxx | 日韩免费观看一区二区三区 | 色在线免费 | 日韩av偷拍| 91麻豆精品一区二区三区 | 久久se视频 | 免费在线观看av电影 | 国产一区高清在线 | 激情开心| 小草av在线播放 | 久久香蕉影视 | 亚洲在线视频网站 | 日本精品久久久一区二区三区 | 伊人官网 | 日日碰狠狠添天天爽超碰97久久 | 免费无遮挡动漫网站 | 在线视频免费观看 | 国产不卡免费视频 | 国产精品一区二区三区免费看 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 国产99爱 | 精品伊人久久久 | 在线观看免费高清视频大全追剧 | 久久午夜精品影院一区 | 2021国产视频 | 女人18精品一区二区三区 | 久久在线免费观看视频 | 欧美日韩激情视频8区 | 最新国产在线视频 | 麻豆 free xxxx movies hd| 免费看片网页 | 亚洲伦理中文字幕 | 日韩在线视频一区 | 在线观看av小说 | 欧美二区视频 | 成人av中文字幕 | 99精品久久99久久久久 | 国产91精品高清一区二区三区 | 久久激情日本aⅴ | 欧美日韩三级 | 视频成人免费 | 精品96久久久久久中文字幕无 | 在线91网| 在线日韩精品视频 | 精品中文字幕在线观看 | 日本高清免费中文字幕 | 免费看一级片 | 99久精品 | 欧美一区二区三区在线视频观看 | 91视频在线网址 | 久久久久久久久久网 | 亚洲另类在线视频 | 日韩一区二区三区观看 | 国产视频69 | 91丨九色丨国产丨porny精品 | 女人18毛片90分钟 | 在线播放日韩av | 久草热久草视频 | 国产精品久久久久一区二区三区共 | 亚洲综合成人在线 | 天天操天天综合网 | 天堂激情网 | 国产高清视频免费 | av国产网站 | 韩国精品一区二区三区六区色诱 | 天天爽天天爽天天爽 | 麻豆国产电影 | 亚洲精品国产精品国自产观看浪潮 | 日韩激情在线视频 | 久久亚洲私人国产精品va | 最近免费中文视频 | 极品国产91在线网站 | 国产在线精品福利 | 国产美女精品久久久 | 久久久久一区二区三区 | 亚洲动漫在线观看 | 亚洲欧美日韩国产 | 日韩免费在线一区 | 欧美激情综合色综合啪啪五月 | 伊人中文字幕在线 | 男女激情麻豆 | 欧美va天堂在线电影 | 在线观看国产www | 91av在线视频播放 | 激情视频二区 | 日韩精品在线视频免费观看 | 81精品国产乱码久久久久久 | 人人澡人人爱 | 日韩在线观看电影 | 久久久久亚洲精品国产 | 91麻豆视频网站 | 麻豆传媒电影在线观看 | 久久a v电影| 亚洲人片在线观看 | 人人爱人人做人人爽 | 午夜美女wwww | www日韩视频 | 国产黄色片免费 | 日本 在线 视频 中文 有码 | 深夜免费小视频 | 91九色蝌蚪在线 | 天天操天天弄 | 91最新在线视频 | 综合久久影院 | 91av社区 | 日本激情动作片免费看 | 国产视频在| 久久久国产99久久国产一 | 国产精品视频全国免费观看 | 国产免费黄色 | 男女日麻批 | 国产精品久久久久久久久久免费看 | 国产亚洲精品久久久久久网站 | 成年人黄色免费视频 | 亚洲精品乱码久久久久久久久久 | 午夜精品电影一区二区在线 | 天堂网一区二区三区 | 久久毛片高清国产 | 久久国产影视 | 91爱在线 | 亚洲成a人片77777潘金莲 | 国产精品一区二区美女视频免费看 | 91久久久国产精品 | 亚洲aaa级| 亚洲国产精品va在线看黑人 | 四虎欧美 | 国产精品男女啪啪 | 狠狠躁日日躁狂躁夜夜躁 | 午夜婷婷网 | 少妇搡bbb | 亚洲激情影院 | 少妇bbb搡bbbb搡bbbb′ | 久久久国产成人 | 色视频在线 | 成人av免费播放 | 亚洲国产日韩精品 | 粉嫩av一区二区三区四区五区 | 狠狠干天天操 | 日本资源中文字幕在线 | 久久艹国产视频 | 久久久麻豆精品一区二区 | 久久精品久久精品久久 | 中文字幕免费观看视频 | 免费观看成人av | 精品1区二区 | 正在播放日韩 | 99久久夜色精品国产亚洲96 | 精品久久网 | 亚洲三级在线免费观看 | 深夜激情影院 | 国产精品久久久久国产精品日日 | 国产精品资源在线观看 | 久久一区二区三区超碰国产精品 | 在线观看日韩专区 | 99爱在线观看 | 黄污网站在线观看 | 999视频在线播放 | 亚洲色图色 | 成人国产综合 | 麻豆免费视频 | 国产午夜在线观看视频 | 国产精品久久网站 | 日本韩国欧美在线观看 | 国产又粗又猛又爽又黄的视频免费 | 日韩精品免费在线观看视频 | www.91成人 | 1024久久| 91爱在线| 精品一二三区视频 | 国产中文字幕一区二区 | 精品国产一区二区三区噜噜噜 | 天天操天天干天天操天天干 | 日本动漫做毛片一区二区 | 999视频网 | 色吊丝在线永久观看最新版本 | 人人草网站 | 欧美性生爱 | 亚洲欧美日韩国产精品一区午夜 | 国产亚洲日 | 久久亚洲综合色 | 九九有精品 | 中文字幕在线观看免费观看 | 91丨九色丨蝌蚪丰满 | 色国产精品一区在线观看 | 国产在线资源 | 中文字幕亚洲精品在线观看 | 日韩av高潮| 在线观看岛国片 | 91精品啪在线观看国产线免费 | 黄色三级网站 | 国产精品av免费在线观看 | 高清av中文字幕 | 欧美片网站yy | 国产在线精品观看 | 成人资源在线播放 | 免费av网站在线 | 日韩久久影院 | 久久久久久久久久亚洲精品 | 成人免费网站视频 | 九九热视频在线免费观看 | 欧美日韩高清一区二区 | 亚洲精品一区二区网址 | 成人黄色毛片视频 | 久久国产精品免费 | 久久午夜精品影院一区 | 日韩高清在线观看 | 国产中年夫妇高潮精品视频 | 在线视频婷婷 | 最近日本字幕mv免费观看在线 | 欧美伦理电影一区二区 | 中文字幕在线精品 | 成人h动漫精品一区二 | 久久精品爱视频 | 国产无套视频 | 在线黄色观看 | 国产精品久久久久一区二区三区共 | 天天干天天做天天爱 | 美女在线国产 | 国产精品刺激对白麻豆99 | 五月丁色 | 最新国产精品拍自在线播放 | 在线观看国产日韩欧美 | 东方av免费在线观看 | 最近更新中文字幕 | 日韩有码在线观看视频 | 久久久蜜桃一区二区 | 狠狠色狠狠色综合日日92 | 日本高清中文字幕有码在线 | 91精品亚洲影视在线观看 | 美女搞黄国产视频网站 | 国产真实精品久久二三区 | 免费在线日韩 | 婷婷中文字幕在线观看 | 亚洲日本精品 | 免费在线观看黄网站 | 精品伦理一区二区三区 | 亚洲欧洲一区二区在线观看 | 亚洲精品色婷婷 | 欧美a级片免费看 | 一区二区欧美在线观看 | 中文字幕最新精品 | 欧美精品久久久久久久久久 | 丁香六月婷婷开心 | 欧美污网站 | 欧美激情视频久久 | 精品国产中文字幕 | 日本精品一区二区在线观看 | 欧美不卡视频在线 | 在线观看岛国片 | 久久久国内精品 | 亚洲精品午夜一区人人爽 | 偷拍精偷拍精品欧洲亚洲网站 | 亚洲最大av网 | 国产精品91一区 | 91视频久久久久久 | 国产精品自产拍 | 玖玖玖国产精品 | av电影在线观看 | 在线观看中文 | 亚洲欧美乱综合图片区小说区 | 欧美视频一区二 | 五月天电影免费在线观看一区 | 四虎影视精品永久在线观看 | 日日摸日日添夜夜爽97 | 丁香五月亚洲综合在线 | 国产精品青草综合久久久久99 | 国产精品爽爽爽 | 国产美女精品视频 | 国产亚洲成人精品 | 天天色天天干天天色 | 特级西西www44高清大胆图片 | 天天操天天操天天操天天操天天操天天操 | 国产区 在线 | 亚洲激情在线 | 久久专区| 中文日韩在线视频 | 色婷婷综合久久久 | 国精产品一二三线999 | 久99久中文字幕在线 | 亚洲黄色在线播放 | 97色婷婷人人爽人人 | 国产精品高清av | 日韩激情在线视频 | 国产一级二级三级在线观看 | 天天干天天摸天天操 | 麻豆94tv免费版 | 天天操夜夜操夜夜操 | 国产精品乱码在线 | 日本中文字幕电影在线免费观看 | 99精品国产aⅴ | 日本久久高清视频 | 精品国产精品一区二区夜夜嗨 | 中文字幕 国产 一区 | 黄色av网站在线免费观看 | 精品国产午夜 | 91丨九色丨蝌蚪丨对白 | 久久这里只有精品久久 | 日韩在线一二三区 | 午夜精品一二三区 | 久久久久日本精品一区二区三区 | 欧美一级久久久 | 日本 在线 视频 中文 有码 | 国产一级视频免费看 | 久久久国产一区二区 | 亚洲 欧美 91 | 中文字幕在线观看视频一区二区三区 | 成人午夜精品福利免费 | 国内久久精品 | 91视频麻豆视频 | 成人一级片视频 | 一区二区三区四区免费视频 | 国产99久久久精品 | 日日婷婷夜日日天干 | 国产精品美女免费视频 | 欧美一区二区在线 | 国产黄在线免费观看 | 在线免费av网 | 亚洲一片黄 | 日韩,中文字幕 | 亚洲天堂网视频在线观看 | 激情深爱.com | 香蕉视频最新网址 | 国产裸体视频网站 | 丁香婷婷在线观看 | 亚洲天堂精品视频在线观看 | 美女精品| 日韩在线免费电影 | 久久国色夜色精品国产 | 娇妻呻吟一区二区三区 | 久久综合给合久久狠狠色 | 久久久首页 | 国产精品毛片一区二区在线 | 丁香婷婷综合五月 | 黄色免费网站 | 亚洲黄色成人网 | 成人全视频免费观看在线看 | 亚洲视频网站在线观看 | 国产成人精品国内自产拍免费看 | 色婷婷综合成人av | 日韩免费观看一区二区三区 | 友田真希x88av| 欧美日韩在线精品 | 久久神马影院 | 999成人| 精品免费观看 | 日韩电影一区二区在线 | 免费99精品国产自在在线 | 成人永久免费 | 51精品国自产在线 | 国产乱码精品一区二区三区介绍 | 综合网伊人| 久久久免费观看视频 | 亚洲精品男人天堂 | 亚洲一级在线观看 | 在线观看视频免费大全 | 日日精品 | 国产不卡精品 | 国产高清绿奴videos | 日韩精品久久久久久 | 中文字幕精 | 久久国产美女 | 亚洲成人av在线电影 | 在线播放91| 精品在线观 | 伊人中文网 | 人人搞人人搞 | 国产亚洲精品日韩在线tv黄 | 亚洲一级国产 | 亚洲最大激情中文字幕 | 免费福利视频网 | 精品在线免费视频 | 国产精品成人一区二区三区吃奶 | 99在线观看视频网站 | 天天操天天操一操 | 五月婷婷操 | 成人av电影在线 | 97人人超碰在线 | sesese图片 | 91精品一| 日本一区二区免费在线观看 | 日韩在线观 |