
m68k用Linuxに実装されたstrcmp()のコードにバグ。12年間気がつかず 53
使用頻度 部門より
Linuxに実装されているMotorola MC68000(m68k)アーキテクチャ向けに最適化された文字列比較に使用される「strcmp」関数の手書きのアセンブリコードが、2010年10月の実装時から2022年12月まで12年間の間、正常に動作していなかったことが判明した。Linus Torvalds氏はこの件に関して「常に壊れていた」と発言している(Phoronix、Linus Torvalds氏による説明)。
この問題についての詳細をツイートしているFadis氏の説明を引用すると、
Linuxのm68kサポートには2010年にアセンブリで書かれた高速なstrcmpの実装が追加された。しかしこの実装は2つの文字を8bit整数のまま減算して結果が0でなければそれを返り値とするという実装だった為、非ASCII文字を含む場合に正しくない結果を返す不具合があった
とのこと。