Đối với Linux 5.18, dự kiến ​​sẽ chuyển mã sang phiên bản C mới hơn để giải quyết các vấn đề khác nhau. 

Linux là gì và nó dùng để làm gì?

Trong quá trình thảo luận của nhà phát triển của hạt nhân linux về vàl chủ đề của một bộ các bản vá để sửa chữa các lỗ hổng của Spectre trong mã để hoạt động với các danh sách được liên kết, nó trở nên rõ ràng đối với nhiều nhà phát triển rằng vấn đề có thể được giải quyết dễ dàng hơn nếu được cho phép trong mã nhân C que tuân theo phiên bản mới hơn của tiêu chuẩn. 

Và hiện tại mã được thêm vào Nhân Linux phải tuân theo đặc điểm kỹ thuật ANSI C (C89), được hình thành vào năm 1989.

Đó là lý do tại sao vấn đề liên quan đến Spectre trong mã là vì se đã tiếp tục sử dụng một trình lặp được xác định riêng biệt sau vòng lặp.

Mặc dù bản chất nói chung là nhanh, dự án hạt nhân dựa trên một số công cụ cũ hơn. Trong khi các nhà phê bình muốn tập trung vào việc sử dụng rộng rãi email của cộng đồng, thì một chủ nghĩa tương tự có thể đáng kể hơn là việc sử dụng phiên bản 1989 của tiêu chuẩn ngôn ngữ C cho mã nhân, một tiêu chuẩn đã được hệ thống hóa trước khi dự án nhân bắt đầu hơn 30 năm trước. Có vẻ như thông lệ lâu đời có thể chấm dứt ngay sau kernel 5.18, dự kiến ​​vào tháng XNUMX năm nay.

Nó được đề cập rằng một macro được sử dụng để lặp qua các phần tử của danh sách được liên kết, và vì trình lặp của vòng lặp được chuyển đến macro này, nó được định nghĩa bên ngoài chính vòng lặp và vẫn có sẵn sau vòng lặp. Sử dụng tiêu chuẩn C99 sẽ cho phép các nhà phát triển xác định các biến cho vòng lặp trong khối for (), điều này sẽ giải quyết vấn đề mà không cần phát minh ra các giải pháp thay thế.

Thật không may, có nhiều vị trí trong hạt nhân mà danh sách
trình lặp được sử dụng sau vòng lặp bị ngắt trên một thay đổi như vậy. May thay
có tập lệnh use_ after_iter.cocci có thể được sử dụng để xác định
mã vị trí. Tôi đã phải điều chỉnh kịch bản một chút vì nó giảm sai
tích cực trong trường hợp sử dụng ban đầu, nhưng những điều đó có liên quan đến bản vá này.

Nhiều vị trí mã được báo cáo chỉ sử dụng trình lặp danh sách sau
chu kỳ nếu có một lối ra sớm (break / goto) và do đó chúng không
liên quan, thích hợp.

Về phần mình, Linus Torvalds đồng ý với ý kiến ​​này để có thể triển khai hỗ trợ cho các thông số kỹ thuật mới hơn và tiếp tục đề xuất chuyển kernel 5.18 sang sử dụng tiêu chuẩn C11, được phát hành vào năm 2011.

Sau đó, trong quá trình xác minh sơ bộ, việc gắn vào GCC và Clang ở chế độ mới được thông qua mà không bị sai lệch. Trừ khi các vấn đề không lường trước phát sinh do thử nghiệm rộng rãi hơn, các tập lệnh xây dựng hạt nhân 5.18 sẽ thay đổi tùy chọn '–std = gnu89' thành '–std = gnu11 -Wno-shift-negative-value'.

Linus Torvalds không thích bản vá cho lắm và không thấy nó liên quan như thế nào đến các lỗ hổng thực thi đầu cơ. Tuy nhiên, sau khi Koschel giải thích thêm về tình hình, Torvalds đã đồng ý rằng "đây chỉ là một lỗi bình thường, đơn giản và đơn giản" và nói rằng nó nên được sửa bất kể loạt phim lớn hơn. Nhưng sau đó, anh ấy đi đến nguồn gốc thực sự của vấn đề: rằng trình lặp được chuyển đến macro duyệt danh sách phải được khai báo trong phạm vi bên ngoài chính vòng lặp:

Lý do chính mà loại lỗi không tích lũy này có thể xảy ra là trước đây chúng ta không có kiểu C99 "khai báo biến trong vòng lặp." Vì vậy, list_for_each_entry () - và tất cả những cái khác - về cơ bản luôn lọc mục nhập HEAD cuối cùng ra khỏi vòng lặp, đơn giản vì chúng tôi không thể khai báo biến trình lặp trong chính vòng lặp.

Cũng cần nhắc lại rằng khả năng sử dụng tiêu chuẩn C17 đã được xem xét, nhưng trong trường hợp này, cần phải tăng phiên bản GCC được hỗ trợ tối thiểu, vì việc bao gồm hỗ trợ cho C11 tuân theo các yêu cầu hiện tại đối với phiên bản GCC (5.1).

Cuối cùng nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết trong liên kết theo dõi.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: AB Internet Networks 2008 SL
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.