Linux 5.18의 경우 다양한 문제를 해결하기 위해 코드를 최신 버전의 C로 이동할 계획입니다. 

Linux는 무엇이며 무엇을 위한 것입니까?

하는 과정에서 개발자 토론 리눅스 커널의 약 그리고l 테마 세트 취약점을 수정하기 위한 패치 코드에서 Spectre의 연결 목록으로 작업하려면, 분명해졌다 많은 개발자에게 문제는 하면 더 쉽게 해결할 수 있습니다. 커널 코드에서 허용되었습니다 C que는 최신 버전의 표준을 따릅니다. 

그리고 현재 리눅스 커널에 추가되는 코드는 89년에 만들어진 ANSI C(C1989) 규격을 따라야 한다는 것이다.

그 이유는 스펙터와 관련된 문제 코드에서 s 때문이었습니다e 계속 반복자를 사용 루프 뒤에 별도로 정의됩니다.

일반적으로 빠른 특성에도 불구하고 커널 프로젝트는 여러 이전 도구에 의존합니다. 비평가들은 커뮤니티의 광범위한 이메일 사용에 초점을 맞추는 것을 좋아하지만, 아마도 더 중요한 시대착오적인 것은 1989년 전에 커널 프로젝트가 시작되기 전에 성문화된 표준인 커널 코드에 대한 C 언어 표준의 30 버전을 사용하는 것입니다. 올해 5.18월로 예상되는 커널 XNUMX과 함께 오랜 관행이 곧 끝날 것 같습니다.

언급된다 매크로는 연결 목록의 요소를 반복하는 데 사용됩니다. 루프 반복자가 이 매크로에 전달되기 때문에 루프 자체 외부에서 정의되고 루프 이후에도 계속 사용할 수 있습니다. C99 표준을 사용하면 개발자가 for() 블록에서 루프에 대한 변수를 정의할 수 있으므로 해결 방법을 개발하지 않고도 문제를 해결할 수 있습니다.

불행히도 커널에는 목록이 있는 여러 위치가 있습니다.
iterator는 그러한 변경을 중단하는 루프 다음에 사용됩니다. 다행스럽게도
이러한 식별에 사용할 수 있는 스크립트 use_after_iter.cocci가 있습니다.
코드 위치. false를 줄이므로 스크립트를 약간 조정해야했습니다.
원래 사용 사례에서는 긍정적이지만 이 패치와 관련이 있습니다.

보고된 다양한 코드 위치는 다음 이후에만 목록 반복자를 사용합니다.
조기 종료(중단/이동)가 있었고 따라서 그렇지 않은 경우 주기
관련된.

그 부분은, Linus Torvalds는 그 아이디어에 동의했습니다. 새로운 사양에 대한 지원을 구현할 수 있고 5.18년에 릴리스된 C11 표준을 사용하기 위해 커널 2011로 이동할 것을 추가로 제안했습니다.

이후 사전 검증 과정에서 GCC와 Clang에 새로운 모드로 탑재하는 것은 편차 없이 통과했다. 보다 광범위한 테스트로 인해 예상치 못한 문제가 발생하지 않는 한 5.18 커널 빌드 스크립트는 '–std=gnu89' 옵션을 '–std=gnu11 -Wno-shift-negative-value'로 변경합니다.

Linus Torvalds는 패치를 별로 좋아하지 않았고 이것이 투기적 실행 취약점과 어떤 관련이 있는지 알지 못했습니다. 그러나 Koschel이 상황을 자세히 설명한 후 Torvalds는 "이것은 평범하고 단순한 일반적인 버그일 뿐"이라는 데 동의하고 더 큰 시리즈와 상관없이 수정되어야 한다고 말했습니다. 그러나 그는 문제의 실제 원인을 탐구했습니다. 즉, 목록 순회 매크로에 전달된 반복자는 루프 자체 외부의 범위에서 선언되어야 한다는 것입니다.

이러한 유형의 비추측 오류가 발생할 수 있는 주된 이유는 역사적으로 C99 스타일의 "루프에서 변수 선언"이 없었기 때문입니다. 따라서 list_for_each_entry()와 다른 모든 항목은 루프 자체에서 반복자 변수를 선언할 수 없기 때문에 기본적으로 항상 루프에서 마지막 HEAD 항목을 필터링합니다.

또한 언급 할 가치가 있습니다. C17 표준을 사용할 가능성이 고려되었으며, 그러나 이 경우 C11에 대한 지원을 포함하는 것이 GCC 버전(5.1)에 대한 현재 요구 사항을 준수하기 때문에 지원되는 최소 GCC 버전을 늘려야 합니다.

최종적으로 그것에 대해 더 많이 알고 싶다면에서 세부 정보를 확인할 수 있습니다. 다음 링크.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자: AB Internet Networks 2008 SL
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.