更新ID(KYUA-202409-1094)
- 更新簡述:
- 修復(fù)tcp模塊listen接口回退問題
- 影響操作系統(tǒng)版本:
- 銀河麒麟高級(jí)服務(wù)器操作系統(tǒng) V10 SP1
銀河麒麟高級(jí)服務(wù)器操作系統(tǒng) V10 SP2
銀河麒麟高級(jí)服務(wù)器操作系統(tǒng) V10 SP32303
- 更新類型:
- 功能增強(qiáng)
- 發(fā)布時(shí)間:
- 2024-09-14
- 更新描述:
- 影響軟件詳情(產(chǎn)品名稱 對(duì)應(yīng)架構(gòu) 軟件包 修復(fù)版本)
銀河麒麟高級(jí)服務(wù)器操作系統(tǒng) V10 SP1 x86_64,aarch64,mips64el kernel 4.19.90-23.51.v2101.ky10
銀河麒麟高級(jí)服務(wù)器操作系統(tǒng) V10 SP2 x86_64,aarch64 4.19.90-25.43.v2101
銀河麒麟高級(jí)服務(wù)器操作系統(tǒng) V10 SP3 2303 x86_64,aarch64 ,loongarch
4.19.90-52.41.v2207
詳細(xì)介紹
1.問題復(fù)現(xiàn)方法:
4.19.90-23.33~23.50;4.19.90-25.25~25.42;4.19.90-52.21~52.40內(nèi)核版本,在調(diào)用listen()接口時(shí),如果滿足下面兩個(gè)條件,會(huì)出現(xiàn)listen()接口返回值不預(yù)期的問題:
1.調(diào)用者都主動(dòng)開啟了SO_REUSEADDR;
2.出現(xiàn)如下調(diào)用sequence:
t1_a時(shí)刻: a調(diào)用者調(diào)用bind()綁定到端口P;
t2_a時(shí)刻:a調(diào)用者開始調(diào)用listen()開始監(jiān)聽端口P;
t1_b時(shí)刻:b調(diào)用者調(diào)用bind()綁定到相同端口P;
t2_b時(shí)刻:b調(diào)用者開始調(diào)用listen()開始監(jiān)聽相同端口P;
只要下面條件成立,就滿足第二個(gè)條件:
t1_a和t1_b兩個(gè)時(shí)刻(不考慮順序)發(fā)生在t2_a和t2_b兩個(gè)時(shí)刻(不考慮順序)前
這里的含義是:t1_x時(shí)刻,兩個(gè)調(diào)用者都用bind()綁定了相同端口P,由于開啟了SO_REUSEADDR所以不會(huì)在bind階段報(bào)錯(cuò)沖突,t2_x時(shí)刻,兩個(gè)調(diào)用者開始監(jiān)聽端口,正常邏輯來看,這里預(yù)期應(yīng)該出現(xiàn)端口沖突,但內(nèi)核并不會(huì)拋出報(bào)錯(cuò)而是正常返回,這會(huì)使得調(diào)用者以為socket正常監(jiān)聽,但實(shí)際上業(yè)務(wù)并不可用。
2.問題分析結(jié)果:
這個(gè)問題是因?yàn)樯嫌紊鐓^(qū)backport補(bǔ)丁dadd0dcaa67d ("net/ulp: prevent ULP without clone op fromentering the LISTEN status")所引入的,它regression了inet_csk_listen_start()函數(shù)中對(duì)返回值的初始化,造成返回值出現(xiàn)不預(yù)期;
3.補(bǔ)丁及下載地址:
從軟件倉庫更新
4.修復(fù)和更新方法:
(用root權(quán)限執(zhí)行以下命令):
yum?update?kernel